R-значение ссылка на аргумент по умолчанию временный для удержания буфера для преобразования WSTRING?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 R-значение ссылка на аргумент по умолчанию временный для удержания буфера для преобразования WSTRING?

Сообщение Anonymous »

фон
У меня есть код с интерфейсом журнала, который принимает const char* только .
Мой код имеет дело со смешанной сумкой std :: string и std :: wstring из разных источников.
и, да, я знаю, что это далеко не идеал, но Давайте сосредоточимся на технических деталях. /code> в единую функцию преобразования, давайте назовем это TC_STR (t strt) , чтобы облегчить построение выражений в журнале.
Для строки реализация Прямо: < /p>

Код: Выделить всё

const char* tc_str(const std::string& str) {
return str.c_str();
}
< /code>
Для wstring я предложил следующее решение, которое работает на VS2022 afaict: < /p>
const char* tc_str(const std::wstring& wstr, std::string&& rTmpLifeExt = std::string()) {
rTmpLifeExt = wchar_to_narrow(wstr);
return rTmpLifeExt.c_str();
}
< /code>
Вот полный тестовый код.std::string narrow = ...
std::wstring wide = ...

printf("n: %s / w: %s", tc_str(narrow), tc_str(wide));
Вопрос
это законное C ++ 20?
в зависимости от в https://stackoverflow.com/a/12554621/321013 (ref cppref) (Ref: §12.2 [class.temporary] ; §1.9 [intro.Execution] < /code>) Связанное время эталона должно быть расширено «правильно», и не должно происходить висящие указатели: < /p>

... Специальный случай в §12.2 [class.temporary] < /code>: < /p>

p4 ... Контексты, в которых временные районы разрушаются в другой точке [...] < /p>
p5 ... Когда ссылка связана с временным. ...: < /p>

Временная связь с эталонным параметром в вызове функции (5.2.2) сохраняется до завершения полной экспрессии
, содержащий вызов < /strong>. < /li>
< /ul>
< /blockquote>
... в §1.9 [intro.excution] P11 < /code>: < /p>

[ Примечание: < /em> ... Подплексии, участвующие в оценке
аргументы по умолчанию (8.3.6) считаются созданными в выражении, которое вызывает функцию < /strong>, а не выражение, которое определяет
аргумент по умолчанию. -ind note ]


Мое самое большое сомнение было бы с R-Value против L -Воля ссылок здесь, но кажется, что они обращаются одинаково. ?

Подробнее здесь: https://stackoverflow.com/questions/794 ... -convertin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»