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

时间:2017-11-23 13:19:54

标签: c++ language-lawyer ifstream

我有一个拼写错误(||而不是|)并注意到这样的代码在GCC失败并使用Visual编译。 我知道std::ifstream的第二个参数是int。因此,从理论上讲,bool必须被隐含地转换为int。那为什么会失败?

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

#include <fstream>

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

1 个答案:

答案 0 :(得分:9)

std::ifstream's constructorstd::ios_base::openmode作为第二个参数,typedef来自实现定义的类型:

typedef /*implementation defined*/ openmode;

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