簡體   English   中英

為什么 istream 對象可以用作 bool 表達式?

[英]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 中,它是對boolexplicit轉換。

在布爾表達式中使用 istream 或 ostream 已啟用,以便 C++ 程序員可以繼續使用具有副作用的表達式作為whilefor循環的條件:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM