有谁知道为什么istream对象可以用作bool表达式?例如:
ifstream input("tmp");
int iValue;
while (input >> iValue)
//do something;
此处input >> iValue
返回对ifstream对象的引用。我想知道为什么这个对象可以用作bool表达式
我查看了ifstream类,发现这可能是由于以下成员函数:
operator void * ( ) const;
有关此功能的详细信息,请参阅here
如果是的话,有人可以向我解释这个功能吗?该函数的原型与通常的运算符重载声明不同。这个函数的返回类型是什么?
如果不是,那么ifstream对象可以用作bool表达式的原因是什么?
期待您的帮助!
成
答案 0 :(得分:23)
在C ++ 11中改变了使用istream作为布尔表达式的确切机制。正如您所发现的,以前是对void*
的隐式转换。在C ++ 11中,它是explicit
转换为bool
。
启用了在布尔表达式中使用istream或ostream,以便C ++程序员可以继续使用带有副作用的表达式作为while
或{{1的条件循环:
for
程序员这样做并希望这样做的原因在于,它提供了更简洁的代码,代码更容易一目了然,而不是像...
SomeType v;
while( stream >> v )
{
// ...
}
然而,在某些情况下,甚至这种冗长的结构也是优选的。这取决于。
干杯&第h。,
答案 1 :(得分:7)
它是给定类型的强制转换运算符。 operator T ()
是类型T的强制转换运算符。在if
语句中,ifstream
转换为void*
,然后void*
转换为{{ 1}}。