0.12--配置编译器:选择语言标准[译]
原文:0.12--配置编译器:选择语言标准 作者:Alex
有许多不同版本的 C++ 可用(C++98、C++03、C++11、C++14、C++17、C++20、C++23 等),您的编译器如何知道该使用哪一个吗?一般来说,编译器会选择一个默认标准。通常,默认值不是最新的语言标准——许多默认值是 C++14,它缺少许多最新和最棒的功能。
如果您希望使用不同的语言标准(您可能会这样做),则必须配置您的 IDE/编译器才能执行此操作。
正在进行的语言标准的代码名
最终确定的语言标准以最终确定的年份命名(例如 C++17 于 2017 年最终确定)。
然而,当制定新的语言标准时,尚不清楚将于哪一年最终确定。因此,即将推出的语言标准被赋予了代号,然后在标准最终确定后被实际名称所取代。您可能仍然会看到某些地方使用的代号(特别是对于尚未确定名称的最新正在进行的语言标准)。
以下是代号到最终名称的映射:
Code name | Finalized name 最终名称 |
---|---|
C++0x | C++11 |
C++1y | C++14 |
C++1z | C++17 |
C++2a | C++20 |
C++2b | C++23 |
C++2c | C++26 (intended, not finalized yet) C++26(预期,尚未最终确定) |
例如,如果您看到 C++1z
,则这与成为 C++17 的语言标准同义。由于C++26还没有最终确定的名称,所以它通常被称为C++2c。
您应该选择哪种语言标准?
在专业环境中,通常选择比最新标准低一两个版本的语言标准(例如,如果 C++20 是最新版本,则意味着 C++14 或 C++17)。这样做通常是为了确保编译器制造商有机会解决缺陷,以便更好地理解新功能的最佳实践。在相关的情况下,这还有助于确保更好的跨平台兼容性,因为某些平台上的编译器可能不会立即提供对新语言标准的完全支持。
对于个人项目和学习时,我们建议选择最新的最终标准,因为这样做没有什么坏处。
在本课程结束时,您可以运行一个测试程序来查看您的编译器使用的语言标准。
在 Visual Studio 中设置语言标准
截至撰写本文时,Visual Studio 2022 默认使用 C++14 功能,这不允许使用 C++17 和 C++20 中引入的较新功能。
要使用这些新功能,您需要启用新的语言标准。不幸的是,目前还没有办法在全球范围内做到这一点——您必须在逐个项目的基础上这样做。
警告
使用 Visual Studio,每次创建新项目时都需要重新选择语言标准。
要选择语言标准,请打开您的项目,然后转到项目菜单 >(您的应用程序的名称)属性,然后打开配置属性 > C/C++ > 语言。
首先,确保配置设置为“所有配置”。
从那里,您可以将 C++ 语言标准设置为您希望使用的 C++ 版本。
我们建议选择最新标准“ISO C++ Latest (/std:c++latest)”,这将确保您可以使用编译器支持的尽可能多的功能。
确保您从下拉菜单中选择语言标准(不要输入)。
有关 Visual Studio 语言标准设置的更多信息,Microsoft 有一个 Visual Studio 语言标准参考文档。
在 Code::Blocks 中设置语言标准
Code::Blocks 可能默认为 C++11 之前的语言标准。您肯定会想要检查并确保启用更现代的语言标准。
好消息是 Code::Blocks 允许在全球范围内设置语言标准,因此您可以设置一次(而不是每个项目)。为此,请转到“设置”菜单 >“编译器...”:
然后找到标有让 g++ 遵循 C++XX ISO C++ 语言标准 [-std=c++XX] 的复选框,其中 XX 是代表语言标准的某个数字(例如 20、17 等):
如果此列表中出现 C++23、C++20 或 C++17,请选择代表最新 ISO 标准的标准(例如,选择让 g++ 遵循 C++20 ISO 语言标准)。如果您也在此列表中看到 GNU 标准,请忽略它们。
如果您在此列表中没有看到 C++17,请升级到 Code::Blocks 的最新版本。
警告
截至撰写本文时,当前版本的 Code::Blocks (20.03) 使用的是过时的编译器 (GCC 8.1.0)。
我们建议通过更新 MinGW 来更新您的编译器。执行此操作的过程可以在第 0.6 课——安装集成开发环境 (IDE) 中的 Code::Blocks 部分找到。
更新到最新版本的 MinGW 后,您可以查看“设置”菜单 >“编译器...”菜单中是否出现更新的语言标准复选框。如果没有,您可以手动选择 C++ 版本,如下所示:
- 找到“全局编译器设置”对话框的“其他编译器选项选项卡”。
- 添加以下编译器选项之一:
-std=c++11
、-std=c++14
、-std=c++17
、-std=c++20
或-std=c++23
(以分别启用 C++11/14/17/20/23 支持)。您还可以尝试使用最新的代码名称(例如-std=c++2c
),以对即将推出的语言标准中的功能提供实验性支持。
在 GCC/G++/Clang 中设定语言标准
对于 GCC/G++/Clang,您可以使用编译器选项 -std=c++11
、 -std=c++14
、 -std=c++17
、 -std=c++20
或 -std=c++23
来支持 C++20。您还可以尝试使用最新的代码名称(例如 -std=c++2c
),以对即将推出的语言标准中的功能提供实验性支持。
为 VS Code 设置语言标准
对于 VS Code,您可以按照上述规则在 GCC/G++/Clang 中设置语言标准。
将适当的语言标准标志(包括双引号和逗号)放置在 tasks.json
配置文件中的 "args"
部分中,位于 "${file}"
之前的单独一行。
我们还希望将 Intellisense 配置为使用相同的语言标准。对于 C++20,在 settings.json
中,在其自己的行上更改或添加以下设置: "C_Cpp.default.cppStandard": "c++20"
。
在哪里可以查看 C++ 标准文档?
每个 C++ 语言标准都由标准文档进行描述,该标准文档是正式的技术文档,是给定语言标准的规则和要求的权威来源。该标准文档不是为了学习而设计的,而是为了让编译器编写者能够准确地实现新的语言标准而设计的。您偶尔会看到人们在解释某些内容如何工作时引用标准文档。
给定语言标准的已批准 C++ 标准文档不是免费提供的。这里有一个购买最新标准的链接。
当制定新的语言标准时,标准草案文件会发布以供审查。这些草稿可在线免费获取。批准标准之前的最后一个标准草案通常足够接近官方标准,可以用于大多数用途。您可以在此处找到标准草案。