在VisualStudio 2019发布过程中,我们已经对C++智能感知做了许多重大改进。我们收集了一些亮点,如果您有兴趣升级到Visual Studio 2019,或者只是想学习如何在编写C++代码时更有效率。如果你从2019年的预展开始关注我们的博客,你可能已经熟悉其中的一些功能了。我们希望你觉得这个收藏很有用。如果您想尝试所有这些功能,请抓取最新版本的 Visual Studio 2019 .
这些特性中的许多都植根于社区建议。如果您对visualstudio有任何建议或遇到问题,请联系我们 开发者社区 . 你的反馈真的帮助我们提供了一个伟大的产品!
C++标准
我们努力使visualstudio成为使用最新语言标准的最佳IDE。这涉及到我们的编译器和标准库中的大量工作,但是如果IDE中没有相应的IntelliSense来支持这些新功能,那么在编辑代码时这是不完整的。
C++ 20
C++ 20包含了新的特性,如模块、协同程序、概念、范围、三路操作符、指定的初始化器等。所有这些特性在IDE中都得到了您所熟悉和喜爱的IntelliSense特性的支持。
例如:协同程序支持:
这些功能中的大多数都值得自己写一篇博文,如果您想了解更多信息,请看这里:
C++现代化
我们希望尽可能容易地更新您的代码库以使用最新的语言标准。这样做的一种方法是我们的代码分析、代码整理和C++的Link工具。它们共同工作,并允许您在visualstudio中根据您在分析和更新代码时的综合程度来调整拨号。这些特性从非常轻的范围,如我们在智能感知引擎内部运行的新C++ Link,类似于 叮当声 这带来了更多的检查,一直到MSVC的代码分析提供的完整规则集。
编辑器内代码分析
微软Visual C++编译器已经完成 广泛支持代码分析 有一段时间了。但是,在VS2019之前,您需要先编译代码,然后才能从综合分析中看到任何警告或错误。在最新版本的Visual Studio中,对正在编辑的任何文件在后台运行代码分析,结果将直接显示在IDE的编辑器中:
你可以 了解更多关于编辑器内代码分析的信息 .
智能感应过梁
我们引入了智能感知C++ LITER作为对在后台运行的更全面的代码分析的补充。IntelliSense linter在您键入时立即为最关键的问题提供即时结果。目前,Link主要关注普通的C++输入错误、常见的错误,如算术和操作符不匹配、性能问题和诸如指针算术问题等安全问题。
这补充了编译器的更全面的代码分析。虽然代码分析比linter更灵活、更强大,但是提供结果也需要更长的时间,因为必须首先编译翻译单元。现在在visualstudio中默认启用了linter。你可以 在这里了解有关IntelliSense Linter的更多信息 .
C++概念智能
C++ 20的一个新的特点是概念。visualstudio使得在代码中创建和使用概念比以往任何时候都更容易。在下面代码中的第一个模板中,我们定义了一个概念“isu cat”,它定义了cat的属性。在第二个模板中,我们使用这个概念来约束可以传递给它的类型。IntelliSense自动完全支持这一点,您可以看到成员列表包含由上述概念(“pet”和“meow”)定义的方法。
我们不需要向IDE提供代码之外的任何信息,也不需要在模板栏(第二个模板的右侧)中手动输入任何类型。所有信息都来自代码中定义的概念。
模板智能感知
如果您使用C++,您无疑会遇到大量模板化代码。在IDE中使用这个可能会很棘手,因为IDE不知道这些模板将如何实例化。VisualStudio2019中的新模板IntelliSense栏有助于解决此问题。使用模板栏,您可以告诉IDE如何使用模板,并根据这些类型接收完整的IntelliSense。如果将光标放置在任何模板中,将看到新的模板栏:
您可能已经注意到下面类型下拉列表中的“实例化”项。visualstudio现在可以扫描整个代码库,自动提供关于如何使用模板的建议。你可以 在此了解有关模板栏的更多信息 .
完美的转发智能感知(使u独特,使u共享,安置,安置u回来)
我们收到的一个社区反馈是为了改进C++中完美转发模板的智能感知。我们已经通过改进STL中一些完美转发模板的处理方式迈出了第一步。特别是,make u unique、make u shared、emplace和emplace u back。
这是以前的情况:
注意参数帮助没有列出您的类型的实际参数。在最新版本的Visual Studio中,它更方便:
不过,我们不想仅仅用这四个STL函数来结束。我们正在研究如何支持您自己的完美转发模板在这里以及。一如既往,我们希望听到您对此的反馈。如果你对此感兴趣,请随时提出建议 开发者社区 .
C++生产率
除了语言一致性和现代化工具之外,我们还希望visualstudio成为市场上完成工作效率最高的IDE。考虑到这一点,我们在2019年增加了一些以生产力为中心的IntelliSense功能。
智能码
IntelliCode使用机器学习提供更好的代码完成建议。我们补充道 智能码 支持Visual Studio 2019中的C++。 默认情况下,IntelliCode将为您提供有关流行库(如STL)的建议。
在VisualStudio2019 16.5中,我们将这一点更进一步,在那里我们添加了 在自己的代码库上训练IntelliCode . 这使您能够针对自己的团队类型获得更明智的完成建议。为了使您的团队完成模型保持最新,您可以 使用GitHub操作自动化培训过程 或 Azure管道 .
智能成员列表筛选
现在,在列出可用成员时,成员列表会考虑更多代码的上下文。例如,如果对常量变量调用成员列表,则所有非常量变量将不再显示在列表中。部分匹配现在也在成员列表中以粗体突出显示。
你可以 在此了解有关成员列表筛选的详细信息 .
强氧支持
我们收到社区反馈的另一个特性是,除了XML文档注释之外,我们的客户还希望IDE中提供Doxygen支持。在VisualStudio 2019中,DoXEGN现在完全支持C++,并将在快速信息和参数帮助UIS中提供信息:
VisualStudio不默认为DoXyGyType注释,但它们可以在“工具>选项>文本编辑器> C/C++ >代码风格>通用”中启用。此外,还可以将首选类型的文档注释添加到项目的.editorconfig文件中。你可以 在这里了解更多关于Doxygen支持的信息 .
IntelliSense彩色化和快速信息改进
为了帮助您尽可能提高工作效率,我们对快速信息、参数帮助和成员列表ui进行了一些增强。您可能会注意到的第一件事是,这些UI现在已完全着色以匹配编辑器:
“快速信息”现在还允许您轻松地搜索错误或函数,并在线键入名称。现在,您可以将鼠标悬停在编辑器中的任何红色曲线上,而不必搜索错误列表:
你可以 在此处了解有关快速信息增强功能的更多信息 .
代码段提交选项
我们收到的反馈使代码段和成员列表的提交选项更加灵活。默认值保持不变,但在“工具选项>文本编辑器> C/C++ >高级>智能信息”中,在输入、空间和Tab之间有新的选项可供选择:
平台支持和可扩展性
我们在IntelliSense引擎中引入了新的灵活性和可扩展性,以支持多种平台,如Windows、Linux和控制台。这包括 使用CMake工具链文件配置IntelliSense引擎 . 这些工具链可以签入到您的代码中,每个配置都可以有一个独特的工具链,带来前所未有的灵活性。
此外,我们还对该方法进行了一些更新 智能感知是为远程机器处理的 . 这通过从远程机器(或)自动下载系统和库头来提高远程IntelliSense的准确性 WSL公司 )并使用它们为目标计算机上的实际标头提供完全逼真的IntelliSense。
向我们发送反馈
请拿一份 Visual Studio的最新更新 试试看。我们很乐意听取您对Visual Studio的反馈。请向开发者社区提交任何建议。