如何在 VisualStudio 中启用 C + + 17编译?

我想使用 C + + 17的特性。

如何在 MicrosoftVisualStudio 中将编译从 C + + 14切换到 C + + 17?

或者它在 VS 的发行版本中不可用?

214958 次浏览

MSBuild (Visual Studio 项目/解决方案 * . vcproj/* . sln) :

添加到项目设置中的附加选项: /std:c++latest以启用最新的特性-目前 C + + 17作为 VS2017,VS2015更新3。

Https://blogs.msdn.microsoft.com/vcblog/2016/06/07/standards-version-switches-in-the-compiler/

/permissive-将禁用非标准 C + + 扩展,并将启用 VS2017中的标准一致性。

Https://blogs.msdn.microsoft.com/vcblog/2016/11/16/permissive-switch/

编辑(2018年10月) : 最新的 VS2017功能在这里记录:

Https://learn.microsoft.com/en-gb/cpp/build/reference/std-specify-language-standard-version

VS2017现在支持: /std:[c++14|c++17|c++latest]。这些标志可以通过项目的属性页设置:

在 VisualStudio 开发中设置此编译器选项 环境

  1. 打开项目的“属性页”对话框。有关详细信息,请参阅使用 项目物业。
  2. 选择配置属性,C/C + + , 注意用词。
  3. 在 C + + 语言标准中,选择 支持从下拉控件,然后选择确定或应用保存 你的改变。

CMake :

Visual Studio 2017(15.7 +)支持 CMake 项目。 CMake 使得以各种方式启用现代 C + + 特性成为可能。最基本的选项是通过在 CMakeLists.txt 中设置 目标的财产来启用现代 C + + 标准:

add_library (${PROJECT_NAME})
set_property (TARGET ${PROJECT_NAME}
PROPERTY
# Enable C++17 standard compliance
CXX_STANDARD 17
)

在接口库的情况下:

add_library (${PROJECT_NAME} INTERFACE)
target_compile_features (${PROJECT_NAME}
INTERFACE
# Enable C++17 standard compliance
cxx_std_17
)

现在有一个下拉列表(至少从 VS2017.3.5开始) ,可以在其中专门选择 C + + 17。可用的选项是(在 project > Properties > C/C + + > Language > C + + Language Standard)

  • ISO C + + 14 Standard. msvc 命令行选项: /std:c++14
  • ISO C + + 17 Standard. msvc 命令行选项: /std:c++17

Visual Studio 2022(MSVC C + + 20和/std: c + + 20 Switch-C + + Team Blog) :

  • ISO C + + 20 Standard. msvc 命令行选项: /std:c++20

任何视觉工作室:

  • 最新的草案标准.msvc 命令行选项: /std:c++latest

如果将现有的 Visual Studio 2015解决方案引入 Visual Studio 2017,并想使用 c + + 17本地编译器构建它,那么首先应该将解决方案/项目重定向到 v141,然后下拉列表将如上所述显示(配置属性-> C/C + +-> 语言-> 语言标准)

Visual Studio 2019版本:

下拉菜单移至:

  • 右键单击项目 (不是解决方案)
  • 物业 (或 Alt + Enter)
  • 从左侧菜单中选择 ConfigurationProperties
  • 将军
  • 在中间有一个叫做“ C + + 语言标准”的选项
  • 它旁边是下拉菜单
  • 在这里,您可以选择 Default、 ISO C + + 14、17或最新版本

VS 代码2020版本

tasks.json文件中,(在使用 g++-9进行构建和调试之后)

为2020年特性添加 -std=c++2a(为2017年特性添加 c++1z)。 添加 -fconcepts以使用 concept关键字

"args": [
"-std=c++2a",
"-fconcepts",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],

现在可以编译并使用2020特性。