我想使用 C + + 17的特性。
如何在 MicrosoftVisualStudio 中将编译从 C + + 14切换到 C + + 17?
或者它在 VS 的发行版本中不可用?
VisualStudio2015Update3不支持您正在寻找的 C + + 17特性(emplace_back()返回引用)。
emplace_back()
支持 C + + 11/14/17特性(现代 C + +)
C + + 11/14/17 VS 2015 RTM 中的特性
VS2015更新2的 STL 是 C + + 17到目前为止的功能完整
VisualStudio2015更新3
VS 2015中的 STL 修复程序更新3
MSBuild (Visual Studio 项目/解决方案 * . vcproj/* . sln) :
添加到项目设置中的附加选项: /std:c++latest以启用最新的特性-目前 C + + 17作为 VS2017,VS2015更新3。
/std:c++latest
Https://blogs.msdn.microsoft.com/vcblog/2016/06/07/standards-version-switches-in-the-compiler/
/permissive-将禁用非标准 C + + 扩展,并将启用 VS2017中的标准一致性。
/permissive-
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]。这些标志可以通过项目的属性页设置:
/std:[c++14|c++17|c++latest]
在 VisualStudio 开发中设置此编译器选项 环境 打开项目的“属性页”对话框。有关详细信息,请参阅使用 项目物业。 选择配置属性,C/C + + , 注意用词。 在 C + + 语言标准中,选择 支持从下拉控件,然后选择确定或应用保存 你的改变。
在 VisualStudio 开发中设置此编译器选项 环境
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)
/std:c++14
/std:c++17
Visual Studio 2022(MSVC C + + 20和/std: c + + 20 Switch-C + + Team Blog) :
/std:c++20
任何视觉工作室:
如果将现有的 Visual Studio 2015解决方案引入 Visual Studio 2017,并想使用 c + + 17本地编译器构建它,那么首先应该将解决方案/项目重定向到 v141,然后下拉列表将如上所述显示(配置属性-> C/C + +-> 语言-> 语言标准)
Visual Studio 2019版本:
下拉菜单移至:
VS 代码2020版本
在 tasks.json文件中,(在使用 g++-9进行构建和调试之后)
tasks.json
g++-9
为2020年特性添加 -std=c++2a(为2017年特性添加 c++1z)。 添加 -fconcepts以使用 concept关键字
-std=c++2a
c++1z
-fconcepts
concept
"args": [ "-std=c++2a", "-fconcepts", "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ],
现在可以编译并使用2020特性。