是时候汇总一下了

在已经发布的几个Visual Studio 2019版本中,我们已经对C++ IntelliSense做了相当多的改进和完善。在今天的这篇文章中,我们会汇总这些改进要点,如果你对Visual Studio 2019感兴趣,或者希望在编写C++代码的时候更加有效率,欢迎继续阅读。

如果你一直看我们的博客更新,则应该对下面的一些要点会比较熟悉。我们希望这篇文章会给你带来帮助。
大部分的改进都来自于社区的建议,如果你有什么好点子,欢迎告诉我们。

C++标准

我们一直致力于使Visual Studio支持最新的C++标准。这涉及我们的编译器和标准库中的大量工作,但是如果没有IDE中相应的IntelliSense来在编辑代码时备份这些新功能,则还无法完成。

C++20

C++20包含了许多很棒的新功能,例如模块,协程,概念,范围,三向运算符,指定的初始化程序等等。你所知道和喜欢的IntelliSense功能在IDE中支持所有这些功能。
举个协程支持的例子:

 

如果需要了解其他关于C++20方面的主题,请阅读我们之前的相关博文。

C++现代化

我们希望尽可能轻松地更新你的代码库,以使用最新的语言标准。
一种方法是使用我们的代码分析,代码整理和C++整理工具。这些功能可以协同工作,并允许你在Visual Studio中灵活配置,具体取决于你希望在分析和更新代码时的全面程度。这些功能包括非常轻巧的产品(例如我们在IntelliSense引擎中运行的新C++ Linters)到诸如clang-tidy的功能(这些功能可带来更多检查),一直到MSVC的Code Analysis提供的完整规则集。

即时代码分析

一段时间以来,Microsoft Visual C++编译器已经为代码分析提供了广泛的支持。 但是,在VS 2019之前,你需要先编译代码,然后才能从此综合分析中看到任何警告或错误。 在最新版本的Visual Studio中,代码分析在后台运行,用于你正在编辑的任何文件,并且结果直接显示在IDE的编辑器中,如下图所示:

 

IntelliSense Linter

我们引入了IntelliSense C++ linter,作为对现在在后台运行得更全面的代码分析的补充。 键入代码时,IntelliSense linter可立即针对最关键的问题提供即时结果。当前,lint专注于常见的C ++错别字,常见的错误(例如算术和运算符不匹配),性能问题以及安全性问题(例如指针算术问题)。

 

这是对编译器更全面的代码分析的补充。 尽管代码分析比linter更为灵活和强大,但由于必须首先编译翻译单元,因此提供结果所需的时间也更长。现在默认情况下,在Visual Studio中启用了linter。

C++ Concept IntelliSense

Concept是C++ 20中的一项伟大的新功能。 Visual Studio使在代码中创建和使用Concept比以往更加容易。在下面代码的第一个模板中,我们定义了概念“ is_cat”,该Concept定义了猫的属性。 在第二个模板中,我们使用该Concept来约束可以传递给它的类型。 IntelliSense自动完全支持此功能,你可以看到成员列表包含上述Concept定义的方法(“宠物”和“喵”)。

 

除了代码之外,我们不需要向IDE提供任何信息,也不需要手动在模板栏中输入类型(在第二个模板的右侧)。 相反,所有信息都来自代码中定义的概念。

模板IntelliSense

如果使用C++,无疑会遇到很多模板化的代码。 在IDE中使用它可能会很棘手,因为IDE并不确切知道这些模板将如何实例化。 Visual Studio 2019中的新模板IntelliSense栏有助于解决此问题。 使用模板栏,你可以告诉IDE如何使用模板,并根据这些类型接收完整的IntelliSense。 如果将光标放在任何模板中,你将看到新的模板栏:

 

你可能已经注意到下面类型下拉列表中的“实例”项。 现在,Visual Studio可以扫描整个代码库,以自动提供有关如何使用模板的建议。

完美转发IntelliSense

我们收到的一项社区反馈是改进IntelliSense,以实现C++中完美的转发模板。 我们已通过改进STL中一些完善的转发模板的处理方式迈出了第一步。 特别是make_unique,make_shared,emplace和emplace_back。
如下图所示:

 

请注意,参数帮助不会列出你的类型的实际参数。 在最新版本的Visual Studio中,它更加方便:

 

不过,我们不想仅止于这四个STL函数。 我们也在这里研究支持你自己的完美转发模板的方法。 与往常一样,我们很乐意听到你对此的反馈。

C++生产力

除了语言一致性和现代化工具之外,我们还希望Visual Studio成为市场上生产力最高的IDE,以完成工作。 考虑到这一点,我们在2019年增加了一些针对生产力的IntelliSense功能。

IntelliCode

IntelliCode使用机器学习来提供更好的代码完成建议。 我们在Visual Studio 2019中添加了对C++的IntelliCode支持。默认情况下,IntelliCode将为你提供有关STL等流行库的建议。

 

我们在Visual Studio 2019 16.5中更进一步,在其中添加了在你自己的代码库上训练IntelliCode的功能。 这样一来,你就可以针对自己团队的类型获得更明智的完成建议。

智能成员列表过滤

现在,“成员列表”在列出可用成员时会考虑更多代码上下文。 例如,如果你在const变量上调用成员列表,则所有非const变量将不再显示在列表中。 现在,部分匹配在成员列表中也以粗体突出显示。

文档支持

我们收到社区反馈的另一个功能是,除了XML文档注释之外,我们的客户还希望在IDE中支持Doxygen。 在Visual Studio 2019中,C++现在完全支持Doxygen,并将在快速信息和参数帮助UI中提供信息:

 

Visual Studio没有默认使用Doxygen样式的注释,但是可以在“工具>选项>文本编辑器> C/C ++>常规”中启用它们。 此外,你可以将自己喜欢的文档注释类型添加到项目的.editorconfig文件中。

个性化着色和快速信息一览改进

为了帮助你提高工作效率,我们对“快速信息”,“参数帮助”和“成员列表”用户界面进行了多项增强。 你可能会注意到的第一件事是,这些UI现在已经完全着色以匹配编辑器:

 

现在,“快速信息”还使你可以轻松地在线搜索错误或功能并键入名称。 现在,你只需将鼠标悬停在编辑器中的任何红色花样上,而不用在错误列表中进行搜索:

 

摘要提交选项

我们已经收到反馈,以使摘要的提交选项和成员列表更加灵活。 默认值保持不变,但是现在在“工具选项>文本编辑器> C / C ++>高级> IntelliSense”中,可以在输入,空格和制表符之间选择新的选项:

 

平台的支持和扩展性

我们在IntelliSense引擎中引入了新的灵活性和可扩展性,以支持各种平台,例如Windows,Linux和控制台。 这包括使用CMake工具链文件配置IntelliSense引擎的能力。 这些工具链可以提交你的代码,并且每个配置都可以具有独特的工具链,从而带来前所未有的灵活性。

此外,我们对远程机器处理IntelliSense的方式进行了一些更新。 通过从远程计算机(或WSL)自动下载系统和头文件,并使用它们来提供完全保真的IntelliSense,以及目标计算机上的实际标头,从而提高了远程IntelliSense的准确性。

总结

感谢老大哥对广大C++开发者的关心和爱护。
还说明:C++依然健康地活着,挺好的。

最后

Microsoft Visual C++团队的博客是我非常喜欢的博客之一,里面有很多关于Visual C++的知识和最新的开发进展。大浪淘沙,如果你对Visual C++这门古老的技术还是那么感兴趣,则可以经常去他们那(或者我这)逛逛。
本文来自:《IntelliSense Improvements in Visual Studio 2019》

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐