鉴于以下代码段无法编译:
std::stringstream ss;
ss << std::wstring(L"abc");
我认为不会这样:
std::stringstream ss;
ss << L"abc";
但确实如此(至少在VC ++上)。我猜这是由于以下ostream::operator<<
重载:
ostream& operator<< (const void* val );
如果我无意中混淆了字符类型,这是否有可能以静默方式破坏我的代码?
答案 0 :(得分:10)
是的 - wstringstream
输出需要wchar_t
。
您可以通过不使用字符串文字来缓解此问题。如果您尝试将const wstring&
传递给stringstream
,则无法编译,如您所述。
答案 1 :(得分:3)
如果我无意中混淆了字符类型,这是否有可能以静默方式破坏我的代码?
总之:是的,并且我没有解决方法。你只会看到一个指针值而不是一串字符的表示,所以它不是潜在的崩溃或未定义的行为,只是输出不是你想要的。