我以为:
if (true)
{execute this statement}
Run Code Online (Sandbox Code Playgroud)
那么if (std::cin >> X)当没有什么"真实"的时候,如何执行为真呢?我能理解,如果它是if ( x <= y)或if ( y [operator] x ),但什么样的逻辑是"的IStream =真的吗?".
das*_*ght 10
答案取决于标准C++库的版本:
if依赖于将流转换为void*使用operator void*operator bool的std::istream请注意,这std::cin >> X不仅是一个语句,还是一个表达式.它回来了std::cin."链接"输入需要此行为,例如std::cin >> X >> Y >> Z.当您将输入放在一个内部时,相同的行为会派上用场if:结果流传递给operator bool或operator void*,因此一个布尔值被送到条件.
std::cin是std::basic_istream继承自std :: basic_ios 的类型,它有一个运算符:std :: basic_ios :: operator bool,在if语句中使用时调用.
if(x)相当于if(bool(x))
在这种情况下bool(x)调用 std::istream::operator bool(x)
这将返回:
如果
failbit或均未badbit设置,则为 true。否则为假。
| 归档时间: |
|
| 查看次数: |
787 次 |
| 最近记录: |