我们很高兴地宣布,VisualStudio202217.4正式可用。在本文中,我将盘点一些与C++开发人员相关的新特性。Arm64在17.3版本中,VisualStudio添加了对Arm64的原生支持。在后续版本中,我们不断增加对更多开发场景的支持。在最新的17.4版本中,可以在生产环境中使用Arm64原生工具链。在工作负载中,“使用C++进行桌面开发”和“使用C++进行游戏开发”已经默认开启了对Arm64的原生开发支持。在新版本的MSVC中,我们花费了大量的精力来改进编译器的诊断信息输出。概念和范围等新的C++特性为更具表现力的代码和更好定义的API提供了机会。但是,要充分利用它们,工具需要具有更好的诊断功能,以便可以查明和解决代码约束故障。有关所有详细信息,请参阅XiangFan的博客文章,但这里有一个改进的快速示例,显示有关重载解析失败的更完整信息,以及有关给定约束失败原因的信息:17.3版本中的错误17.4版本中的错误提示作为这项工作的一部分,我们还添加了对将编译器诊断输出为SARIF的实验性支持。这可以通过实验标志/experimental:log来完成。除了改进诊断之外,我们还扩展了编译器的命名返回值优化(NRVO)功能。有关详细信息,请参阅BranHagger的博客文章。主要改进是为涉及异常处理或循环的情况启用NRVO。例如,在17.3中,返回结果时复制/移动结果没有被省略,但现在会被省略。CMake和跨平台开发容器是打包运行应用程序所需的一切的好方法。使用Dockerfile,可以捕获所有先决条件,以便在部署和运行容器的任何地方都有一致的运行时环境。开发容器扩展了这一概念,以捕获在容器中开发和构建应用程序所需的一切。现在可以在VisualStudio中将开发容器与C++项目一起使用。使用连接管理器连接到远程系统现在支持SSHAgentJump,它用于通过另一个SSH主机访问SSH主机(例如,访问防火墙后面的主机)。测试资源管理器用于公开CTest测试的内部前缀,使列表更难阅读和导航。我们通过将它们全部分组在一个标题下对此进行了改进。以下是之前和之后:其他工具我们还对VisualStudio在某些工作负载中附带的其他工具进行了一些更新。如果您在Arm64计算机上使用VisualStudio,则可以通过VisualStudio安装程序中的CMake组件获取Arm64版本的CMake和Ninja。我们已将CMake版本更新到版本3.24.1。此版本附带许多新功能,包括用于删除CMake缓存的–freshCLI标志、if表达式中的路径比较和CMakePresets.json版本5。我们将在VisualStudio2022的17.5版本中添加对CMakePresets.json版本5的支持,但17.4添加了对版本4的支持。请参阅CMake发行说明以了解所有新功能。我们还将LLVM的发布版本更新到版本15.0.1。有关可用内容,请参阅LLVM和Clang发行说明。生产力使用“创建声明/定义”功能时,过去新代码会在一个小窗口中打开,供您“查看”。现在这是可配置的:您可以选择浏览(默认)、打开文档或不导航。该设置位于选项>文本编辑器>C/C++>高级>重构下。我们修复了IntelliSense和MSBuild之间预编译标头的一致性差距。过去,当通过/Yu使用PCH并通过/FI强制包含时,IntelliSense总是会先处理它,然后再通过/FI包含任何其他标头。这与构建行为不匹配,因此通过此更改,/FI标头将按指定的顺序处理。IDE性能我们正在继续改进IDE的性能。在此版本中,我们改进了打开新解决方案时的索引性能。大型项目可以看到17.3的20-35%的改进。代码安全我们用“关键事件”信息丰富了一些代码分析警告,这些信息描述了分析结果是如何得出的。我们改进并扩展了此功能,将此信息添加到更多分析中,并为您提供了在VisualStudio中可视化它的新方法。例如,安装了SARIF查看器扩展后,关键事件信息现在将直接用于注释源。C++标准化我们将继续关注C++标准化的最新进展。您可以在github上的变更日志中看到最新和即将推出的STL功能,但这里有一些我最感兴趣的功能:>P0881R7>P1328R1constexprtype_info::operator==()>P2440R1ranges::iota,ranges::shift_left,ranges::shift_right>P2441R2views::join_with>P2302R4ranges::contains,ranges::contains_subrange标准化工作也扩展到IntelliSense,现在支持C23属性,我们会继续完善对C++20Module的支持支持。vcpkgvcpkg现在已经6岁了,拥有超过2000个开源库!我们将继续为vcpkg本身和VisualStudio添加新功能以改进集成。例如,vcpkg工件是一种允许您描述构建应用程序所需的工具和环境的功能。我们现在为CMake项目添加了对vcpkg工件的VisualStudio支持,因此如果您的项目包含vcpkg清单,则该环境将在项目打开时自动激活。您可以在VisualStudio博客文章中阅读更多相关信息。游戏开发我们正致力于将UnrealEngine集成到VisualStudio中。从17.4开始,您现在可以直接在IDE中查看哪些虚幻引擎蓝图引用、使用和继承自C++类。要启用此功能,请确保在VS安装程序中启用了“IDESupportforUnrealEngine”组件,并从UnrealMarketplace下载VisualStudioIntegrationTools。请密切关注17.5中的更多新功能,并告诉我们您对蓝图集成的看法!综上所述,本次更新为C++开发者带来了很多新特性。如果你有机会,你可以尝试一些新的东西。首先设置一个Flag:明天有时间一定要尝试新的东西。最后,MicrosoftVisualC++团队的博客是我最喜欢的博客之一。里面包含了很多关于VisualC++的知识和最新的开发进展。大浪淘沙,如果你对VisualC++这个古老的技术还那么感兴趣,可以常去看看他们(或者我)。本文来自:《What’s New for C++ Developers in Visual Studio 2022 17.4》
