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

How to enable C++17 compiling in Visual Studio?

提问人:Tudvari 提问时间:12/24/2016 最后编辑:Aaron LiuTudvari 更新时间:9/11/2022 访问量:255277

问:

我想使用 C++17 功能。

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

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

C++ Visual-Studio 编译 C++17

评论

4赞 ildjarn 12/24/2016
哪些 C++17 功能?哪个版本的 Visual Studio?如果你问的是C++17,你为什么要标记你的问题和?c++11c++14
9赞 Tudvari 12/24/2016
C++17 不可用,我认为那些对特定版本的 C++ 感兴趣的人更知道如何切换它。例如,我希望 std::vector.emplace_back() 返回对新创建的元素的引用。我知道那条+1线,我得到了那个参考,但无论如何我都想知道我问题的答案。VS 社区 2015(14.0.25431.01 更新 3)
0赞 Mikel F 12/24/2016
您可能应该在这里查看: blogs.msdn.microsoft.com/visualstudio
3赞 Praetorian 12/24/2016
你不能在 VS 中启用特定的语言方言,你会得到他们实现的任何内容。如果您使用的是 VS21015,您可能会在标准库功能中投票给 C++17,但使用语言功能则不然。
1赞 Yakk - Adam Nevraumont 12/24/2016
@preat MSVC 2017 有一个“最新”设置,但尚未发布。

答:

10赞 Remy Lebeau 12/24/2016 #1

Visual Studio 2015 Update 3 不支持要查找的 C++ 17 功能(返回引用)。emplace_back()

支持 C++11/14/17 功能(现代 C++)

C++11/14/17 VS 2015 RTM 中的功能

VS 2015 Update 2 的 STL 是 C++ 到目前为止功能完整的 17 个

Visual Studio 2015 Update 3

VS 2015 Update 3 中的 STL 修复

39赞 Zingam 12/25/2016 #2

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

添加到项目设置中的其他选项:启用最新功能 - 目前为 C++17,从 VS2017 开始,VS2015 Update 3。/std:c++latest

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 开发中设置此编译器选项 环境

  1. 打开项目的“属性页”对话框。有关详细信息,请参阅工作 替换为项目属性。
  2. 选择配置属性、C/C++、 语言。
  3. 在 C++ 语言标准中,选择语言标准 支持,然后选择“确定”或“应用”以保存 您的更改。

CMake

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

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
)

评论

0赞 Travis Su 4/16/2020
我在 VS2017 中做了下拉列表,但编译器仍然继续应用 C++98 标准,这到底是什么
271赞 Johan Lundberg 10/16/2017 #3

现在有一个下拉列表(至少从 VS 2017.3.5 开始),您可以在其中专门选择 C++17。可用选项包括(在项目 > 属性下> C/C++ >语言> C++语言标准)

  • ISO C++14 标准。msvc 命令行选项:/std:c++14
  • ISO C++17 标准。msvc 命令行选项:/std:c++17

Visual Studio 2022(MSVC C++ 20 和 /std:c++20 开关 - C++ 团队博客):

  • ISO C++20 标准。msvc 命令行选项:/std:c++20

任何 Visual Studio:

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

评论

4赞 Roi Danton 7/18/2018
语法 ,并且也有效,例如,当您更喜欢手动输入编译器选项时(使用 VS2017 测试)。-std:c++14-std:c++17-std:c++latest
1赞 Johan Lundberg 7/18/2018
答案中是否已经不清楚了,或者您具体是指而不是我列出的开关?-/std:
3赞 Roi Danton 7/18/2018
我看到了来自或的好处。那么侵入性就不那么强了(但是语法仍然略有不同(而不是))。gccclang-:=
1赞 Johan Lundberg 12/27/2019
@AndreiKrasutski。目前还没有 ISO C++2,但 /std:c++latest 中有一些支持。C++20标准预计将于明年推出。我在回答中编辑了评论。
3赞 pixel 9/18/2020
如果在 Visual Studio 2017 > 项目属性 > C/C++ >语言> C++标准下拉列表中未选择任何内容,则使用什么C++标准?我在下拉列表中有 14、17 和 latest,但没有选择,那么在这种情况下,我如何找到项目中使用的 c++ 标准?
6赞 WilliamClements 4/10/2018 #4

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

12赞 sanitizedUser 5/28/2020 #5

Visual Studio 2019 版本:

下拉菜单已移至:

  • 右键单击项目(不是解决方案)
  • 属性(或 Alt + Enter)
  • 从左侧菜单中选择配置属性
  • 常规
  • 中间有一个选项称为“C++语言标准”
  • 旁边是下拉菜单
  • 在这里您可以选择默认,ISO C++ 14,17或最新

评论

3赞 Persixty 11/8/2020
请记住对“所有配置”和“所有平台”执行此操作。这是来自花了 2 个小时弄清楚为什么它仍然不起作用的人!但谢谢你的回答。
1赞 zBeeble 1/26/2022
在虚幻设置的 vs2019 中,没有配置设置 -> 通用 -> C++ 语言标准。可以添加吗?有一个 nmake -> 附加选项设置为 /std:c++14 ...但是将其更改为 C++17 似乎不起作用。
-1赞 Ahmet 11/30/2020 #6

VS Code 2020 版本

在文件中,(在使用tasks.jsong++-9)

添加 2020 年功能(2017 年功能)。 添加以使用关键字-std=c++2ac++1z-fconceptsconcept

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

现在编译,您可以使用 2020 功能。