如何使Visual Studio C ++ 2010编译像gcc / g ++一样? (或相反亦然)

时间:2011-10-07 15:36:53

标签: c++ visual-studio-2010 visual-c++

假设你有以下简单的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编译器是一件简单的事吗?)

(我不相信禁用编​​译器扩展是一种解决方案,因为我已经这样做了,它仍然可以编译而没有错误。)

2 个答案:

答案 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

在您的包含之前的顶部。