tow*_*owi 5 c++ boolean istream implicit-conversion
我发现了一张C-ISH C++代码,并问自己(略学术)的问题,有什么隐式类型转换发生在这里,以在到达bool该if要求?
int val;
if( (std::cin >> val) == 0 )
...
Run Code Online (Sandbox Code Playgroud)
我到目前为止:
std::cin >> val返回(参考)cin,因此istream&==接收cin和0作为操作数,即istream和int我认为没有bool operator==(istream&, int)可用的(也没有相应的成员函数istream),所以是否涉及转换?
为了清楚起见,程序员的意图是检查输入是否成功,即应该写入if(!(std::cin >> val)).
我认为没有可用
bool operator==(istream&, int)的[...],那么是否涉及转换?
的确。有一个转换运算符,booltrue如果没有发生错误则返回,false否则返回。
根据 C++11 标准第 27.5.5.4/1 段:
Run Code Online (Sandbox Code Playgroud)explicit operator bool() const;1返回:
!fail().
因此表达式 ( cin >> val) 返回 a (对)的引用cin,它是 的左操作数==。正确的操作数是0.
现在cin可以转换为bool,并且可以与 进行比较0。换句话说,你的if陈述相当于:
if (!(std::cin >> val))
{
// ...
}
Run Code Online (Sandbox Code Playgroud)