【问题标题】:How to meet the C++ standards version in my g++ compiler?如何在我的 g++ 编译器中满足 C++ 标准版本?
【发布时间】:2018-02-05 18:04:58
【问题描述】:

我知道 C++ 有标准而不是版本,因此,它们的版本由规范管理(如 C99、C++11 等)

C++编译器是有版本的,每个版本都可以支持多种c++标准……是这样吗?

关于上面,我找到了我的g++版本编译器,是7.2.0

λ bgarcial [~] → g++ --version
g++ (Ubuntu 7.2.0-8ubuntu3) 7.2.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  
λ bgarcial [~] → 

我的 g++ 编译器有以下目录,我正在使用原生 makefile 以 C++ 语言构建

λ bgarcial [include/c++/7] → pwd
/usr/include/c++/7

λ bgarcial [include/c++/7] →

如何确定我的 g++ 编译器支持哪些 C++ 标准?

g++ documentation 包含以下信息:

GCC 支持 1998 年发布的原始 ISO C++ 标准以及 2011 年和 2014 年的修订版。如果没有给出 C++ 语言方言选项,则默认值为 -std=gnu++14。

它还包含这个有趣的部分:

默认情况下,GCC 还为 C++ 语言提供了一些额外的扩展,这些扩展在极少数情况下会与 C++ 标准发生冲突。请参阅控制 C++ 方言的选项。使用上面列出的 -std 选项会禁用这些与所选 C++ 标准版本冲突的扩展。

您还可以使用 -std=gnu++98(对于带有 GNU 扩展的 C++98)或 -std=gnu++11(对于带有 GNU 的 C++11)显式选择 C++ 语言的扩展版本扩展名),或 -std=gnu++14(对于带有 GNU 扩展的 C++14),或 -std=gnu++1z(对于带有 GNU 扩展的 C++1z)。

在给定的 C++ 项目中,如何指定要使用的 C++ 标准/规范类型?

在CMakeLists.txt 中可能是什么?或...

作为构建一些基本文件的标志?例如:

g++ client.cpp main.cpp -o client.out -lzmq -std=gnu++11

推荐的 C++ 标准/规范是什么。

我问这个是因为在第一个例子中,我假设我使用的是带有 GNU 扩展的 C++14,这与之前引用的 g++ 编译器文档相关。 在某些情况下,我没有使用某些函数或库,但我不知道这是由于使用的标准还是其他原因。

推荐使用的 C++ 标准是什么?如何配置我的项目以使用它?

【问题讨论】:

  • CMake 提供了一种以与编译器无关的方式指定标准的方法。
  • 决定为您的项目使用哪个版本将取决于您打算使用的平台和编译器。
  • 这个问题是题外话。如果不是基于意见,那就太宽泛了。有太多的事情要考虑。在 boost 成为标准之前,您可以从 boost 中获得很多东西,但是使用标准的东西当然更好。此外,不同的标准提倡略有不同的风格(最突出的是auto、lambdas 等甚至在 c++11 之前都不存在),因此您可以使用最适合您的风格。始终使用最新标准也可能是一种有效的策略...
  • 这不是 C++ 或编译器问题;这是一个 CMake 问题。

标签: c++ gcc cmake g++


【解决方案1】:

您可以使用 -std 开关指定标准

$g++ -std=c++11 your_file.cpp -o your_program

【讨论】:

  • 嗨,我怎样才能永久做到这一点?无需添加 -std 标志?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多