我有一段代码,它长得像下面这样。假设它在一个名为 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++编译器的默认标准版本,但我不知道是哪一个?作为程序员/开发人员,我是否应该始终使用带有额外参数的后者?
-std
会改变编译器的语义,而不是运行完全不同的编译器。您对编译器(“gcc” vs “clang” vs ...)或编译器尝试遵守的标准(“C++17” vs “C++11” vs ...)感兴趣吗? - gmatht