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

yba*_*kos 6 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;
}
Run Code Online (Sandbox Code Playgroud)

这可以通过Visual Studio C++ 2010编译.

但是,在基于Linux的系统上,如果我执行make main并编译,我们得到一个预期的错误,因为我们没有调用c_str()字符串常量,如下所示:

ifstream somefile(FILENAME.c_str());
Run Code Online (Sandbox Code Playgroud)

众所周知,并在此SO线程中进行了描述.

如何使VS像gcc/g ++一样运行并为上面的代码引发编译错误?或者,我怎样才能让gcc/g ++像VS一样运行并编译上面没有错误?(升级我的gnu编译器是一件简单的事吗?)

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

jpa*_*cek 6

在这种情况下,Visual Studio在C++ 11标准方面表现正确(它现在也适用于g ++).我不确定你为什么要这样做,但你可能需要编辑MSVC的标题(不可取而且相当激烈).

但奇怪的是,他们没有在文档中写出来.你能检查一下哪个构造函数实际被调用了吗?


cra*_*str 5

可作为较新的C++标准的一部分.

要禁用,请添加

  #define _HAS_CPP0X 0
Run Code Online (Sandbox Code Playgroud)

在您的包含之前的顶部.