std :: stringstream如何在运算符&lt; <! - ? - >中处理wchar_t *

时间:2010-10-01 19:39:03

标签: c++ unicode stl stringstream

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

std::stringstream ss;
ss << std::wstring(L"abc");

我认为不会这样:

std::stringstream ss;
ss << L"abc";

但确实如此(至少在VC ++上)。我猜这是由于以下ostream::operator<<重载:

ostream& operator<< (const void* val );

如果我无意中混淆了字符类型,这是否有可能以静默方式破坏我的代码?

2 个答案:

答案 0 :(得分:10)

是的 - wstringstream输出需要wchar_t

您可以通过不使用字符串文字来缓解此问题。如果您尝试将const wstring&传递给stringstream,则无法编译,如您所述。

答案 1 :(得分:3)

  

如果我无意中混淆了字符类型,这是否有可能以静默方式破坏我的代码?

总之:是的,并且我没有解决方法。你只会看到一个指针值而不是一串字符的表示,所以它不是潜在的崩溃或未定义的行为,只是输出不是你想要的。