![](/img/trans.png)
[英]When an object provides both `operator!` and `operator bool`, which is used in the expression `!obj`?
[英]Why istream object can be used as a bool expression?
有誰知道為什么 istream 對象可以用作 bool 表達式? 例如:
ifstream input("tmp");
int iValue;
while (input >> iValue)
//do something;
這里input >> iValue
返回對 ifstream 對象的引用。 我想知道為什么這個對象可以用作 bool 表達式。
我查看了 ifstream 類,發現這可能是由於以下成員函數造成的:
operator void * ( ) const;
有關此功能的詳細信息,請參見此處。
如果是,有人可以向我解釋這個功能嗎? 這個函數的原型不同於通常的運算符重載聲明。 這個函數的返回類型是什么?
如果不是,那么 ifstream 對象可以用作 bool 表達式的原因是什么?
期待您的幫助!
程
在 C++11 中更改了將 istream 用作布爾表達式的確切機制。 正如您所發現的,以前是對void*
的隱式轉換。 在 C++11 中,它是對bool
的explicit
轉換。
在布爾表達式中使用 istream 或 ostream 已啟用,以便 C++ 程序員可以繼續使用具有副作用的表達式作為while
或for
循環的條件:
SomeType v;
while( stream >> v )
{
// ...
}
程序員這樣做並希望這樣做的原因是,它提供了更簡潔的代碼,比例如……
for( ;; )
{
SomeType v;
stream >> v;
if( stream.fail() )
{
break;
}
// ...
}
然而,在某些情況下,甚至這種冗長的結構也可能是可取的。 這取決於。
它是給定類型的強制轉換運算符。 operator T ()
是類型 T 的ifstream
轉換運算符。在if
語句中, ifstream
轉換為void*
,然后void*
轉換為bool
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.