假设你有以下简单的main.cpp文件:
#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;
int main() {
const string FILENAME = "foo.txt";
ifstream somefile(FILENAME);
populations.close();
return 0;
}
这可以通过Visual Studio C ++ 2010进行编译。
但是,在基于Linux的系统上,如果我执行make main
并编译,我们会收到预期的错误,因为我们没有在字符串常量上调用c_str()
,如下所示:
ifstream somefile(FILENAME.c_str());
众所周知,并在this SO thread中描述。
如何让VS像gcc / g ++一样运行并为上面的代码引发编译错误?或者,我怎样才能让gcc / g ++像VS一样运行并编译上面没有错误? (升级我的gnu编译器是一件简单的事吗?)
(我不相信禁用编译器扩展是一种解决方案,因为我已经这样做了,它仍然可以编译而没有错误。)
答案 0 :(得分:6)
在这种情况下,Visual Studio在C ++ 11标准(it works on g++ now, too)方面的行为正确。我不确定你为什么要这样做,但你可能需要编辑MSVC的标题(不可取而且相当激烈)。
奇怪的是,they don't write it in their documentation。你能检查一下哪个构造函数实际被调用了吗?
答案 1 :(得分:5)
是新c ++标准的一部分。
要禁用,请添加
#define _HAS_CPP0X 0
在您的包含之前的顶部。