std :: stringstream如何在operator <<中处理wchar_t*?

Ped*_*ino 5 c++ unicode stl stringstream

鉴于以下代码段无法编译:

std::stringstream ss;
ss << std::wstring(L"abc");
Run Code Online (Sandbox Code Playgroud)

我不认为这个会:

std::stringstream ss;
ss << L"abc";
Run Code Online (Sandbox Code Playgroud)

但它确实(至少在VC++上).我猜这是由于以下ostream::operator<<过载:

ostream& operator<< (const void* val );
Run Code Online (Sandbox Code Playgroud)

如果我无意中混合了字符类型,这是否有可能默默地破坏我的代码?

Ste*_*end 11

是的-你需要wstringstreamwchar_t输出.

您可以通过不使用字符串文字来缓解这种情况.如果你试图传递const wstring&stringstream它,就不会编译,正如你所指出的那样.


CB *_*ley 6

如果我无意中混合了字符类型,这是否有可能悄悄地破坏我的代码?

总之:是的,据我所知,没有解决方法。您只会看到指针值的表示形式,而不是字符串,因此这不是潜在的崩溃或未定义的行为,只是输出不是您想要的。