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