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