【发布时间】:2010-06-07 17:32:34
【问题描述】:
如果我有一个wstringstream,并且我想将其.str() 数据作为 LPCWSTR,我该怎么做?
【问题讨论】:
如果我有一个wstringstream,并且我想将其.str() 数据作为 LPCWSTR,我该怎么做?
【问题讨论】:
你可以做wstringstream.str().c_str()as DeadMG writes。但是,该调用的结果仅在表达式的生命周期结束之前有效,这是其中的一部分。
具体来说,这个
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 引用的临时对象的生命周期将延长到引用的生命周期。
【讨论】:
:)
f 之前销毁临时代码。这真的发生在我身上一次!所以绝对不能存储c_str() 或data() 的结果。
wstring s(wstr.str()); f(s.c_str()); 有什么区别?特别是范围/寿命延长的东西?谢谢。
wstringstream.str().c_str();
【讨论】: