C ++: получить LPCWSTR от wstringstream? - PullRequest
1 голос
/ 07 июня 2010

Если у меня есть wstringstream, и я хочу получить его .str() данные в виде LPCWSTR, как я могу это сделать?

Ответы [ 2 ]

12 голосов
/ 07 июня 2010

Вы можете сделать wstringstream.str().c_str() , как DeadMG пишет . Однако результат этого вызова действителен только до конца времени жизни выражения, частью которого он является.

В частности, это

const LPCWSTR p = wss.str().c_str();
f(p); // kaboom!

не будет работать , поскольку wstringstream.str() возвращает временный объект, а .c_str() возвращает указатель на этот объект, и в конце назначения этот временный объект подорванный.

Вместо этого вы можете либо

f(wss.str().c_str()); // fine if f() doesn't try to keep the pointer

или

const std::wstring& wstr = wss.str(); // extends lifetime of temporary 
const LPCWSTR p = wstr.c_str();
f(p); // fine, too

потому что временные объекты, связанные с const ссылкой, будут иметь время жизни увеличенное до времени жизни ссылки.

0 голосов
/ 07 июня 2010

wstringstream.str().c_str();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...