【发布时间】:2017-05-24 15:50:12
【问题描述】:
以下代码在 Visual Studio 2008 中编译,但在 Visual Studio 2013 及更高版本中失败。
std::string str("foo");
std::stringstream ss(str);
float f = 0;
if ((ss >> f) == false)
std::cout << "Parse error\n";
错误信息是
错误 C2678: 二进制 '==' : 未找到采用左手的运算符 'std::basic_istream>' 类型的操作数(或 没有可接受的转换)
并通过如下更改成功修复:
if (!(ss >> f))
std::cout << "Parse error\n";
我不太了解这一点。我的问题是,首先涉及哪些运算符或强制转换或ios 标志允许读取的流被评估为布尔值,那么为什么缺少operator== 会破坏它?
【问题讨论】:
标签: c++ c++11 visual-c++ type-conversion language-lawyer