我想使用 C++17 功能。
如何在 Microsoft Visual Studio 中将编译从 C++14 切换到 C++17?
或者在 VS 的发布版本中不可用?
现在有一个下拉菜单(至少从 VS 2017.3.5 开始),您可以在其中专门选择 C++17。可用选项有(在项目 > 属性 > C/C++ > 语言 > C++ 语言标准下)
/std:c++14
/std:c++17
Visual Studio 2022(MSVC C++20 和 /std:c++20 开关 - C++ 团队博客):
/std:c++20
任何 Visual Studio:
/std:c++latest
MSBuild(Visual Studio 项目/解决方案 *.vcproj/*.sln):
添加到项目设置中的其他选项:
/std:c++latest
以启用最新功能 - 目前从 VS2017、VS2015 Update 3 开始为 C++17。
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]
。这些标志可以通过项目的属性页设置:
在Visual Studio开发中设置该编译器选项 环境
- 打开项目的属性页对话框。详细信息请参见工作 与项目属性。
- 选择配置属性、C/C++、 语言。
- 在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
)
Visual Studio 2019版本:
下拉菜单移至:
Visual Studio 2015 Update 3 不支持您正在寻找的 C++17 功能(
emplace_back()
返回引用)。
如果将现有的 Visual Studio 2015 解决方案引入 Visual Studio 2017 并且您想使用 c++17 本机编译器构建它,您应该首先将解决方案/项目重新定位到 v141 ,然后下拉列表将按上述方式显示(配置属性 -> C/C++ -> 语言 -> 语言标准)
VS Code 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年的功能了。