代码之家  ›  专栏  ›  技术社区  ›  Pedro d'Aquino

std::stringstream如何处理运算符<<中的wchar\u t*?

  •  4
  • Pedro d'Aquino  · 技术社区  · 15 年前

    假设以下代码段无法编译:

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

    我也没想到这个会:

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

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

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

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

    2 回复  |  直到 15 年前
        1
  •  4
  •   CB Bailey    15 年前

    一句话:是的,而且据我所知没有解决办法。您将看到一个指针值的表示,而不是一个字符串,因此这不是一个潜在的崩溃或未定义的行为,只是输出不是您想要的。

        2
  •  12
  •   Steve Townsend    15 年前

    wstringstream 对于 wchar_t 输出。

    您可以通过不使用字符串文字来缓解这种情况。如果你想通过 const wstring& 到 stringstream

    推荐文章