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语句条件,三元运算符的条件等。