【发布时间】:2017-11-27 19:10:33
【问题描述】:
我有一段代码如下所示。假设它在一个名为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 上,如果我输入cmd 命令g++ example.cpp,它将失败。我认为这是一长串错误,主要是由于链接器抱怨无法从 string 转换为 const char*。
但如果我使用像这样的附加参数运行编译器:g++ -std=c++17 example.cpp,它将编译并正常工作,没有任何问题。
当我运行前一个命令时会发生什么?我猜 C++ 编译器的默认 version 标准会被调用,但我不知道是哪个?作为程序员/开发人员,我是否应该始终使用带有额外参数的后一个命令?
【问题讨论】:
-
取决于你的 gcc 版本。
-
咳咳@Downvoters;这并不像你想象的那么明显,而且这个问题用一个很好的(虽然不可移植的)例子写得很好。
-
我认为
-std改变了编译器的语义,而不是运行一个完全不同的编译器。您是否对编译器(“gcc” vs “clang” vs ...)或编译器尝试遵循的标准(“C++17” vs “C++11” vs ....)感兴趣? -
@gmatht 后者绝对是我想知道的。我想我把像“-std=c++11”这样的命令参数误解为执行一个完全独立的编译器。