1

私が読んだところでは、C++ 11はistream/ostreamのためのvoid *への暗黙的変換をサポートしなくなりました。これは暗黙的にboolに変換され、whileループなど例えば:C++ 11 boolへのbasic_istream変換

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

    } 
    cout << "break"; 

標準は、今では

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

は、新しい標準サポートされた方法になり、明示的なブール演算子を実装しています。しかし、Visual Studio 2017とGNU g ++と-std = C++ 11フラグでは、両方のバージョンが完全にコンパイルされます。標準によってサポートされているistreamからのブールへの暗黙の経路なしで、これはなぜですか?私はVSが標準で速く遊んでいることを理解することができますが、GNUもですか?どんな洞察もありがとう。

答えて

2

void*への暗黙的な変換は削除されましたが、明示的な変換でboolに置き換えられました。 C++ 11以降では、boolへの明示的なキャスト演算子は特別に扱われます。これは「コンテキスト変換」として知られており、ブール値を当然期待する式に暗黙的に使用できます:ifステートメント条件、三項演算子の条件など

関連する問題