c++ - 将流转换为 bool 在另一个编译器上不起作用

标签 c++

为什么用 libstdc++这有效,但与 libc++它失败?在 gcc 上它也可以工作:

bool b = std::cin;

最佳答案

您应该添加编译时使用的语言标准和编译器。

直到 C++11,std::basic_iosoperator void*,从 C++11 开始它有 explicit operator bool .

第二个是显式的,这意味着您的示例中的隐式转换不能使用它。

来自 GNU 项目的 libstdc++ 仍然无条件地包含预 C++ 转换(版本 4.9.1):

operator void*() const
{ return this->fail() ? 0 : const_cast<basic_ios*>(this); }

漏洞 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56193自 2014 年 9 月 24 日起已解决,因此下一个版本应该更正。

关于c++ - 将流转换为 bool 在另一个编译器上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26304949/

相关文章:

c++ - 在套接字编程中接收结构并写入文件

c++ - 通过模板函数内的迭代器调用仿函数 "pointed to"

c++ - CreateFile dwDesiredAccess 和 dwShareMode 组合

c++ - Visual C++ 2010 映射/设置迭代器不兼容

c++ - 为什么我不能将 unique_ptr 推回 vector 中?

c++ - 如果类类型已知,是否使用虚拟分派(dispatch)?

c++ - sizeof(size_t) == sizeof(void*) 总是正确的吗?

c++ - C++ 的总和和计数的空间索引

c++ - 为什么 vector 迭代器指向越界?

c++ - 使用内联汇编创建一个 c++ dll