【发布时间】:2017-07-23 19:08:58
【问题描述】:
我将此消息打印为错误
二元运算符“
由 CLion 的检查员(我的 IDE),只要我的代码看起来像这样。
stringstream ss;
ss << "Foo baré féé bar"
<< someObj->aStdStringProperty << endl;
(故意像“é”这样的口音)
它编译和链接都很好,实际上是字符串成员部分导致它抛出错误。
仅供参考,我不是写这篇文章的人,这是我正在从事的一个项目。
我不习惯 C++ 中的字符串、wostreams、w_char 和所有这些东西,所以我有点困惑是我的 IDE 过于苛刻还是我误解了我的课程/阅读材料。
提前致谢!
【问题讨论】:
-
我认为在使用宽字符流时需要使用
std::wstring。我自己对它们并不熟悉,但是在 ideone.com 上进行的快速测试表明,当我将std::string更改为std::wstring时它起作用了。 -
如果它编译和链接正常,你的IDE是错误的。事实上,您可以看到您没有使用宽
stringstream。 (或者,您的问题与真实代码不符,这种情况我们没有帮助您的希望)。 -
我认为问题在于
anStdStringProperty是std::string,但他的同事使用的是宽字符流。在提交者的代码中,他使用的是std::stringstream,所以当然可以编译得很好。 -
我今天也注意到了这个问题(而且我没有使用任何重音字符或任何东西——普通的 sub-127 ASCII)。 CLion 认为我有一个错误,但我的编译器工作正常,我的程序运行良好。
-
如果
ss是std::stringstream并且myLiteral是const char *,CLion 似乎认为表达式ss << myLiteral的输出类型是ostream<wchar_t>,而不是ostream<char>(正如我所料)。知道这一点就解释了为什么 CLion 认为存在错误。有什么理由认为 CLion 关于ostream<wchar_t>是正确的吗?