我想使用C++17的特性。
在Microsoft Visual Studio中如何将编译器从C++14切换到C++17?
或者这在VS的发行版本中不可用吗?
我想使用C++17的特性。
在Microsoft Visual Studio中如何将编译器从C++14切换到C++17?
或者这在VS的发行版本中不可用吗?
/std:c++14
/std:c++17
Visual Studio 2022 (MSVC C++20 and the /std:c++20 Switch - C++ Team Blog):
/std:c++20
任何版本的 Visual Studio:
/std:c++latest
-std:c++14
、-std:c++17
和-std:c++latest
也适用,例如当您更喜欢手动输入编译器选项时(经过VS2017测试)。 - Roi Danton/std:
开关中的-
而不是/
? - Johan Lundberggcc
或clang
转换而来时,我看到了它的好处。然后,连字符-
就不会那么突兀(但语法仍略有不同,使用冒号:
代替等号=
)。 - Roi DantonMSBuild (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
进行构建和调试后)
添加 -std=c++2a
来使用 2020 特性(c++1z
用于 2017 特性)。
添加 -fconcepts
来使用 concept
关键字。
"args": [
"-std=c++2a",
"-fconcepts",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
现在编译,您就可以使用2020年的功能了。