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

194

我想使用C++17的特性。

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

或者这在VS的发行版本中不可用吗?


4
哪些C++17特性?使用哪个版本的Visual Studio?如果您在询问C++17,为什么要标记您的问题为“c++11”和“c++14”? - ildjarn
9
C++17不可用,我认为那些对特定版本的C++感兴趣的人更了解如何切换它。 例如,我想让std::vector.emplace_back()返回新创建元素的引用。我知道只需要再加1行代码就能得到该引用,但我仍想知道我的问题的答案。使用VS Community 2015 (14.0.25431.01 Update 3)。 - Tudvari
你应该在这里检查:https://blogs.msdn.microsoft.com/visualstudio/ - Mikel F
3
在 Visual Studio 中,无法启用特定的语言方言,你只能使用他们实现的语言版本。如果你在使用 VS2015,可能会有比较好的运气使用被投票加入到 C++17 标准库功能中的特性,但是对于语言特性来说就不是那么容易了。 - Praetorian
请查看以下链接:https://www.visualstudio.com/vs/visual-studio-2017-rc/。VS 2017 rc 可能支持新的 c++17 特性。 - Semyon Burov
1
MSVC 2017有一个“最新”的设置,但那还没有发布。 - Yakk - Adam Nevraumont
6个回答

270
自 Visual Studio 2017.3.5 版本起,你现在可以在项目 > 属性 > C/C++ > 语言 > C++ 语言标准 中的下拉菜单中选择 C++17。可用选项包括:
  • ISO C++14 标准。msvc 命令行选项:/std:c++14
  • ISO C++17 标准。msvc 命令行选项:/std:c++17

Visual Studio 2022 (MSVC C++20 and the /std:c++20 Switch - C++ Team Blog):

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

任何版本的 Visual Studio:

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

4
语法-std:c++14-std:c++17-std:c++latest也适用,例如当您更喜欢手动输入编译器选项时(经过VS2017测试)。 - Roi Danton
1
这个答案已经不清楚了吗?还是你特别指的是我列出的/std:开关中的-而不是/ - Johan Lundberg
3
gccclang转换而来时,我看到了它的好处。然后,连字符-就不会那么突兀(但语法仍略有不同,使用冒号:代替等号=)。 - Roi Danton
1
@AndreiKrasutski。目前还没有ISO C++20,但是在/std:c++latest中有一些支持。C++20标准预计将于明年发布。我在我的答案中添加了一个注释。 - Johan Lundberg
3
如果在 Visual Studio 2017 中,项目属性 > C / C++ > 语言 > C++ 标准下拉菜单中没有选择任何内容,那么将使用哪个 C++ 标准? 我的下拉菜单中有14、17和最新版本,但没有选择任何一个,那么在这种情况下,如何确定项目使用的 C++ 标准?如果在 Visual Studio 2017 中,项目属性 > C / C++ > 语言 > C++ 标准下拉菜单中没有选择任何选项,那么 Visual Studio 将使用默认值作为 C++ 标准。默认情况下,Visual Studio 2017 使用 C++14 标准。要查看您的项目正在使用的确切 C++ 标准,请检查项目的属性页,其中包含有关 C++ 标准的信息。 - pixel
显示剩余4条评论

39

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

  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

12

Visual Studio 2019 版本:

下拉菜单已移至:

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

3
记得对“所有配置”和“所有平台”都执行此操作。这来自一个花了2小时时间找出为什么还是不起作用的人!但还是感谢你的回答。 - Persixty
1
在 Unreal 安装的 vs2019 中,没有“配置设置”->“常规”->“C++ 语言标准”。能否添加它?有一个 nmake -> 附加选项,设置为 /std:c++14 ...但将其更改为 c++17 似乎不起作用。 - zBeeble


6

如果您想将现有的Visual Studio 2015解决方案导入到Visual Studio 2017,并使用c++17本地编译器进行构建,您应该首先将解决方案/项目重新定位到v141,然后才会出现如上所述的下拉菜单(配置属性 -> C / C ++ -> 语言 -> 语言标准)。


-1

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年的功能了。


1
没有 Visual Studios 2020,这是针对 V.S. Code 的。 - JΛYDΞV
但问题并不仅限于VS Studio。如果您重新阅读问题,在“它在VS的发布版本中不可用?”一行的末尾,问题是灵活的,不需要严格要求。 - Ahmet
1
这个问题不是那么灵活的,如果是的话,它需要被关闭。它不够专注。VS Code不是Visual Studio的另一个版本。一个是集成开发环境,一个是编辑器。一个会显示你编写的代码,而另一个则嵌入到它正在工作的项目的文件系统中。一个由Microsoft资助,一个由Microsoft开发。一个可以在Linux上使用,而另一个则不能。一个的配置对另一个没有用处。你还不如回答如何在记事本中编译C++17。 - JΛYDΞV
@Ahmet 其实根本没有所谓的VS Studio。VS非常清晰和有针对性。 - ashrasmun
@ashrasmun 在发表评论之前先进行搜索总是更好的。现在是VSCode,以前是Visual Studio(https://www.microsoft.com/en-US/download/details.aspx?id=40784)。 - Ahmet
@Ahmet Visual Studio和Visual Studio Code是不同的工具。它们的名称从未改变过。别再表现得那么刻薄了。 - ashrasmun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接