C++:从wstringstream获取LPCWSTR?

Nic*_*ner 1 c++ string unicode

如果我有wstringstream,并且我想将其.str()数据作为LPCWSTR获取,我该怎么做?

sbi*_*sbi 12

你可以wstringstream.str().c_str() 像DeadMG写的那样做.但是,该调用的结果仅在表达式的生命周期结束时才有效,这是其中的一部分.

具体来说,这个

const LPCWSTR p = wss.str().c_str();
f(p); // kaboom!
Run Code Online (Sandbox Code Playgroud)

将无法工作,因为wstringstream.str()返回一个临时对象并.c_str()返回指向该对象的指针,并在赋值结束时将销毁临时对象.

你可以做的也是

f(wss.str().c_str()); // fine if f() doesn't try to keep the pointer
Run Code Online (Sandbox Code Playgroud)

要么

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

因为绑定到const引用的临时对象将使其生命周期延长到引用的生命周期.