1

從我讀過的,C++ 11不再支持向istream/ostream隱式轉換爲void *,然後可以隱式轉換爲bool,以便在while循環中使用等等。例如:C++ 11 basic_istream轉換爲bool

string test; 
    while((getline(cin,test))) 
    { 
     cout << "received" << endl; 

    } 
    cout << "break"; 

現在的標準實現了一個明確的布爾運算符,所以

while(static_cast<bool>(getline(cin,test))) 

將成爲新標準支持的方法。但是,在Visual Studio 2017和帶有-std = C++ 11標誌的GNU g ++中,兩個版本都可以很好地編譯。爲什麼這個標準不支持這個標準,沒有明確的途徑來支持這個標準呢?我能理解VS在標準中快速和鬆散,但GNU呢?感謝您的任何見解。

回答

2

隱式轉換爲void*已被刪除,但它被明確轉換爲bool。從C++ 11開始,一個明確的轉換運算符bool被專門處理。它被稱爲「上下文轉換」,可以隱式地用在自然期望布爾值的表達式中:if語句條件,三元運算符的條件等。