Which C++ standard is the default when compiling with g++?(使用 g++ 编译时,哪个 C++ 标准是默认的?)
问题描述
我有一段代码如下所示.假设它在一个名为 example.cpp
I have a piece of code that looks like the following. Let's say it's in a file named 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*.
On a windows, if I type in the cmd the command g++ example.cpp, it will fail. It's a long list of errors I think mostly due to the linker complaining about not being able to convert from string to const char*.
但如果我使用像这样的附加参数运行编译器:g++ -std=c++17 example.cpp,它将编译并正常工作,没有任何问题.
But if I run the compiler using an additional argument like so: g++ -std=c++17 example.cpp, it will compile and work fine with no problems.
当我运行前一个命令时会发生什么?我猜 C++ 编译器的默认 version 标准会被调用,但我不知道是哪个?作为程序员/开发人员,我是否应该始终使用带有额外参数的后一个命令?
What happens when I run the former command? I'm guessing a default version standard of the C++ compiler gets called, but I don't know which? And as a programmer/developer, should I always use the latter command with the extra argument?
推荐答案
如果你的 g++ 版本晚于 4.7 我想你可以找到支持的 C++ 标准的默认版本,如下所示:
If your version of g++ is later than 4.7 I think you can find the default version of C++ standard supported like so:
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
一些参考资料:
- 使用的
g++选项的详细信息 - 为什么这只适用于
g++4.7 或更高版本
- Details on the
g++options used - Why this only works for
g++4.7 or later
这篇关于使用 g++ 编译时,哪个 C++ 标准是默认的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:使用 g++ 编译时,哪个 C++ 标准是默认的?
基础教程推荐
- 这个宏可以转换成函数吗? 2022-01-01
- C++结构和函数声明。为什么它不能编译? 2022-11-07
- 静态库、静态链接动态库和动态链接动态库的 .lib 文件里面是什么? 2021-01-01
- 在 C++ 中计算滚动/移动平均值 2021-01-01
- 如何检查GTK+3.0中的小部件类型? 2022-11-30
- 如何在 C++ 中初始化静态常量成员? 2022-01-01
- 如何将 std::pair 的排序 std::list 转换为 std::map 2022-01-01
- 如何通过C程序打开命令提示符Cmd 2022-12-09
- 常量变量在标题中不起作用 2021-01-01
- 我有静态或动态 boost 库吗? 2021-01-01
