以下代碼在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:二進制 '==':沒有操作員發現它接受一個左手 的操作數類型的 '標準:: basic_istream>'(或 有沒有可接受的轉化率)
,並通過改變被成功固定如下:
if (!(ss >> f))
std::cout << "Parse error\n";
我對此不甚瞭解。我的問題是,涉及哪些操作員或角色或者ios
標誌可以使流讀取首先被評估爲布爾值,然後爲什麼缺少operator==
會打破它?
值得一提的是,即使'operator bool'被標記爲'explicit',由於針對bool運算符的顯式轉換的少數例外之一,if(foo)或if(!foo)示例[here](http://coliru.stacked-crooked.com/a/e884a7adaf92a472)。我相信這被稱爲**上下文轉換**,請參閱[此博客文章](http://chris-sharpe.blogspot.ca/2013/07/contextually-converted-to-bool.html)。 – vsoftco
NULL是一個擴展爲* a *空指針常量的宏,而不是「空指針常量」,也不是「空指針常量」的同義詞。 –