C++11 basic_istream 转换为 bool

C++11 basic_istream conversion to bool

据我所知,C++11 不再支持 istream/ostream 到 void* 的隐式转换,然后可以将其隐式转换为 bool,用于 while 循环等。例如:

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

    }
    cout << "break";

标准现在实现了一个明确的 bool 运算符,所以

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

将是新标准支持的方法。然而,在 Visual Studio 2017 和带有 -std=c++11 标志的 GNU g++ 中,两个版本都可以完美编译。没有从标准支持的 istream 到 bool 的隐式路径,这是为什么?我可以理解 VS 使用标准快速和松散地玩,但是 GNU 呢?感谢您的任何见解。

删除了到 void* 的隐式转换,但它被显式转换为 bool。从 C++11 开始,对 bool 的显式转换运算符进行特殊处理。它被称为 "contextual conversion",可以隐式地用在自然需要布尔值的表达式中:if 语句条件、三元运算符的条件等。