错误:在Linux下的std :: ifstream中bool到int转换引发的错误

dgr*_*rat 7 c++ ifstream language-lawyer

我有一个拼写错误(||而不是|)并注意到这样的代码失败了GCC并用Visual编译.我知道第二个参数std::ifstreamint.所以理论上,a bool必须被隐含地转换为a int.那么为什么失败呢?

导致错误的示例(我只使用了一些int而不是标志).

#include <fstream>

int main(int argc, char * argv[]) {
  std::ifstream("foo", 2 | 3 || 4)
}
Run Code Online (Sandbox Code Playgroud)

YSC*_*YSC 9

std::ifstream的构造函数作为第二个参数std::ios_base::openmode,typedef来自实现定义的类型:

typedef /*implementation defined*/ openmode;
Run Code Online (Sandbox Code Playgroud)

似乎Visual使用整数,GCC没有,这就是你的代码在GCC上失败的原因.