如何修复istringstream编译器错误?

时间:2014-03-11 16:30:00

标签: c++ visual-studio-2010 c++11 visual-studio-2013

我有一些现有的代码可以在Visual Studio 2010中编译好但是在Visual Studio 2013中出错。代码只是从istringstream中提取一个字符串并检查转换是否成功:

bool okFlag = false;
istringstream s;
string myStr;

<snip>

okFlag = s >> myStr;

错误是:

error C2440: '=' : cannot convert from 'std::basic_istream<char,std::char_traits<char>>' to 'bool'

我想在C ++ 11中,转换的返回类型不是bool。这样做的正确方法是什么?是否可以使代码满足VS2010和VS2013?

1 个答案:

答案 0 :(得分:10)

在C ++ 11中basic_ios::operator boolexplicit,而C ++ 03用户定义到void *的转换可以隐式转换为bool。要修复代码,您需要显式地转换结果。

okFlag = static_cast<bool>(s >> myStr);

请注意,explicit bool转换运算符仍会在需要布尔结果的上下文中隐式转换为bool,例如if语句中的条件表达式。这就是为什么下面的代码仍然编译而不必添加演员。

if(s >> myStr) {         // here operator bool() implicitly converts to bool
  // extraction succeeded
}