我有一段代码如下所示.假设它位于名为example.cpp的文件中
#include <fstream>
#include <string> // line added after edit for clarity
int main() {
std::string filename = "input.txt";
std::ifstream in(filename);
return 0;
}
在Windows上,如果我在命令g example.cpp中键入cmd,它将失败.这是一个很长的错误列表,我认为主要是由于链接器抱怨无法从字符串转换为const char *.
但是如果我使用像这样的附加参数运行编译器:g -std = c 17 example.cpp,它将编译并正常工作而没有任何问题.
当我运行前命令时会发生什么?我猜测C编译器的默认版本标准被调用,但我不知道哪个?作为程序员/开发人员,我应该总是使用后一个命令和额外的参数吗?
解决方法:
如果您的g版本晚于4.7,我认为您可以找到支持的C标准的默认版本,如下所示:
g++ -dM -E -x c++ /dev/null | grep -F __cplusplus
我的机器的一个例子:
mburr@mint17 ~ $g++ --version | head -1
g++ (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
mburr@mint17 ~ $g++ -dM -E -x c++ /dev/null | grep -F __cplusplus
#define __cplusplus 199711L
一些参考:
> Details on the g++
options used
> Why this only works for g++
4.7 or later