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


120

我想使用C ++ 17功能。

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

还是在VS的发行版本中不可用?


4
哪些C ++ 17功能?哪个版本的Visual Studio?如果你问有关C ++ 17为什么要标记您的问题c++11c++14
ildjarn '16

6
c ++ 17尚不可用,我认为那些对特定C ++版本感兴趣的人更清楚如何切换它。例如,我希望std :: vector.emplace_back()返回对新创建元素的引用。我知道+1行,并且得到了参考,但是无论如何我都想知道我问题的答案。VS Community 2015(14.0.25431.01 Update 3)
Tudvari

您可能应该在这里检查:blogs.msdn.microsoft.com/visualstudio
Mikel F

3
您无法在VS中启用特定的语言方言,而已实现了它们。如果您使用的是VS21015,您可能会对C ++ 17中的标准库功能投票感到好运,但对于语言功能却没有那么多。
Praetorian

1
@preat MSVC 2017具有“最新”设置,但尚未发布。
Yakk-Adam Nevraumont

Answers:


161

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

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

(我敢打赌,一旦C ++ 20退出市场并得到Visual Studio的更全面支持,它将成为/std:c++20


3
语法-std:c++14-std:c++17并且-std:c++latest也适用,例如,当你喜欢手动输入编译器选项(与VS2017测试)。
罗伊·丹顿

从答案中是否还不清楚,或者您是-不是要/std:列出我列出的开关?
约翰·伦德伯格

3
我看到来自gcc或的好处clang。然后,-侵入性较小(但是语法仍然略有不同(:而不是=))。
罗伊·丹顿

在VS 2019中,要转到项目属性,请转到“解决方案资源管理器”,右键单击项目标题,然后选择“属性”。然后按照这篇文章的指示。
BabarBaig

1
@AndreiKrasutski。目前尚没有ISO C ++ 20,但/ std:c ++ latest中有一些支持。预计明年将推出C ++ 20标准。我在答案中的评论中进行了编辑。
约翰·伦德伯格

31

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://docs.microsoft.com/zh-CN/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.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中做了下拉菜单,但编译器仍然继续应用C ++ 98标准,这真是太糟糕了
Travis Su


5

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


2

Visual Studio 2019版本:

下拉菜单移至:

  • 右键单击项目(不是解决方案)
  • 属性(或Alt + Enter)
  • 从左侧菜单中选择配置属性
  • 一般
  • 中间有一个名为“ C ++语言标准”的选项
  • 旁边是下拉菜单
  • 在这里您可以选择默认,ISO C ++ 14、17或最新版本
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.