我有一个拼写错误(||
而不是|
)并注意到这样的代码在GCC失败并使用Visual编译。
我知道std::ifstream
的第二个参数是int
。因此,从理论上讲,bool
必须被隐含地转换为int
。那为什么会失败?
导致错误的示例(我只使用了一些int而不是标志)。
#include <fstream>
int main(int argc, char * argv[]) {
std::ifstream("foo", 2 | 3 || 4)
}
答案 0 :(得分:9)
std::ifstream
's constructor将std::ios_base::openmode
作为第二个参数,typedef
来自实现定义的类型:
typedef /*implementation defined*/ openmode;
似乎Visual使用整数,GCC没有,这就是为什么你的代码在GCC上失败的原因。