在 Visual Studio 中编辑和重构 C++ 代码

Visual Studio 提供了多种用于帮助编写、编辑和重构代码的工具。

IntelliSense

IntelliSense 是一款功能强大的代码完成工具,可在键入时建议符号和代码片段。 Visual Studio 中的 C++ IntelliSense 实时运行,并且会在更新代码库时对其进行分析并提供建议。 在键入更多字符时,推荐结果列表会缩小。

C++ 成员列表下拉列表的屏幕截图,其中显示了可用于字符串的方法,例如追加、分配等。

一些符号会自动省略,帮助减少结果。 例如,在从类外部访问类对象的成员时,默认情况下无法看到私有成员;如果你没在子类的上下文中,则看不到受保护的成员。 可使用底部的按钮调整筛选。

从下拉列表中选择符号后,可使用 Tab、Enter 或其他某个提交字符(默认有 { } [ ] ( ) . , : ; + - * / % & | ^ ! = ? @ # \)自动完成 。 要在此列表中添加或删除字符,请在“快速启动”(Ctrl + Q)中搜索“IntelliSense”,然后选择“文本编辑器”>“C/C++”>“高级”选项。 “成员列表提交字符”选项允许使用所需更改自定义列表。

“成员列表筛选模式”选项控制显示的 IntelliSense 自动完成建议的类型。 默认情况下,它设置为“模糊”。 在模糊搜索中,如果你有名为 MyAwesomeClass 的符号,则可以键入“MAC”并在自动完成建议中查找该类。 模糊算法设置了符号要显示在列表中所必须满足的最小阈值。 智能筛选显示包含与键入的内容匹配的 substring 的所有符号。 前缀筛选搜索以键入的内容开头的字符串。

有关 C++ IntelliSense 的详细信息,请参阅 Visual C++ IntelliSense配置用于 IntelliSense 的 C++ 项目

IntelliCode

IntelliCode 是 AI 辅助的 IntelliSense。 它将最有可能的候选项置于完成列表的顶部。 IntelliCode 建议基于 GitHub 上的数千个开放源代码项目,其中每个项目都有 100 多个星级。 在与代码的上下文相结合时,将定制完成列表以推荐常见做法。

在编写 C++ 时,IntelliCode 可在使用 C++ 标准库等热门库时提供协助。 代码的上下文用于首先提供最有用的建议。 在以下示例中,size 成员函数通常与 sort 函数一起使用,因此它显示在结果列表的顶部。

C++ IntelliCode 下拉列表的屏幕截图,其中显示了矢量类成员按代码中最常用的顺序排序。

在 Visual Studio 2022 和 Visual Studio 2019 中,IntelliCode 可用作 C++ 桌面开发工作负载中的可选组件。 要确保 IntelliCode 对 C++ 可用,请转到“工具”>“选项”>“IntelliCode”>“常规”并将“C++ 基础模型”设置为“启用” 。

在 Visual Studio 2017 中,IntelliCode 可用作 Visual Studio Marketplace 中的扩展。

预测 IntelliSense(试验性)

“预测 IntelliSense”是一项试验性功能,它使用上下文感知来限制 IntelliSense 下拉列表中显示的结果数。 该算法会应用类型匹配,以便仅显示与预期类型匹配的结果。 在最简单的情况下,如果键入 int x = 并调用 IntelliSense 下拉列表,则只会看到整数或返回整数的函数。 默认情况下,此功能处于禁用状态,因为它仍处于开发阶段。 它最适合用于全局符号;尚不支持成员函数。 可以通过在“快速启动”中键入“预测”或转到“工具”>“选项”>”文本编辑器”>”C/C++”>“试验性”>“启用预测 IntelliSense”来将其打开 。

要替代“预测 IntelliSense”并显示较长的列表,请按 Ctrl + J 。如果已启用“预测 IntelliSense”,则调用 Ctrl + J 将删除预测筛选器 。 再次按 Ctrl + J 会从相关成员列表结果中删除辅助功能筛选器。 IntelliSense 下拉列表下的 ([+]) 按钮与 Ctrl + J 具有相同功能。将鼠标悬停在该按钮上,可查看有关要显示的内容的工具提示信息。

C++ 预测 IntelliSense 的屏幕截图。

上面的屏幕截图显示了下拉列表下的几个按钮。 它们为不同类型的结果启用了 IntelliSense 筛选器:

  • 变量和常量
  • 函数
  • 类型
  • 枚举
  • 命名空间

仅当某一按钮与当前 IntelliSense 会话相关时,才会显示该按钮。 通常不会同时看到所有按钮。

模板 IntelliSense

模板栏是一个 UI 元素,它在光标位于模板定义上时显示。 这非常有用,因为你可以为编辑模板正文时显示的 intellisense 提供示例模板参数。 例如,可以指定模板参数的类型 std::vector<int>。 然后,在模板正文中使用该参数时,你将在 intellisense 中看到 std::vector<int> 的成员。

模板栏的屏幕截图,其中突出显示了“添加所有现有实例化”选项。

单击 <T> 图标,展开/折叠“模板栏”。 单击铅笔图标或双击“模板栏”,打开“编辑”窗口,在其中为参数指定参数类型。

在模板栏中编辑体验的屏幕截图,在其中输入每个模板参数的类型。

模板栏可以根据代码中模板的实例化自动填充参数类型。 单击“添加所有现有实例化”,查看已用于在整个代码库中实例化模板的所有实际参数的列表。

模板 IntelliSense 结果的屏幕截图,其中列出了用于实例化模板参数 C 的不同类型,例如 C = AmbientLight、C = Candle 等。

编辑器底部的窗口显示了每个实例化的位置及其参数。 可以选择实例化,以转到代码中发现该实例化的位置。

代码中模板实例化列表的屏幕截图。其中列出了实例化、文件、位置和参数。

“模板栏”信息特定于用户。 该信息存储在 .vs 文件夹中,并且不提交给源代码管理。

错误波浪线和快速修复

如果编辑器检测到代码出现问题,它将在问题下方添加彩色波浪线。 红色波浪线表示无法编译的代码。 绿色波浪线表示仍可能很严重的其他类型的问题。 可以打开“错误列表”窗口,获取有关问题的详细信息。

对于某些类型的错误和常见的编码模式,编辑器将以灯泡(在将鼠标悬停在波浪线上时出现)的形式提供“快速修复”。 单击向下箭头查看建议。

以下示例中声明了 vector 但未找到定义,因此编辑器会包含必需的头文件:

# include 向量的错误和建议的快速修复的屏幕截图。

编辑器还提供了快速修复,以获得一些重构机会。 例如,如果在头文件中声明一个类,Visual Studio 将会在单独的 .cpp 文件中为其创建定义。

突出显示“通道点 C P P”选项中的“创建通道路由迭代器的定义”的快速修复的屏幕截图。

Change tracking

每次对文件进行更改时,左侧都将出现一个黄色栏,表示所做的更改未保存。 保存文件时,该栏将变为绿色。 只要文档在编辑器中打开,就会保留绿色和黄色栏。 它们代表自上次打开文档以来所做的更改。

C++ 更改跟踪的屏幕截图。左侧下方的黄色条表示更改。

移动代码

可以通过选中代码,按住 Alt 并按向上/向下箭头键来上下移动代码行。

插入代码片段

代码片段是一段预定义的源代码。 右键单击单个点上或选定文本并选择代码片段,以插入代码片段或用代码片段环绕选定文本。 下图显示用 for 循环环绕选定语句的三个步骤。 最终图像中的黄色突出显示是使用 tab 键访问的可编辑字段。 有关详细信息,请参阅代码片段

“插入代码片段”下拉控件的屏幕截图。

已选择函数。 在右键单击函数名称后显示的下拉列表中,“环绕方式...”以黄色突出显示。 在“环绕方式:”下拉列表中,选择了“for”循环的代码片段。 这会导致环绕函数放置一个 for 循环。 循环变量和限制以黄色显示,表明它们是可编辑的字段。

添加类

在“项目”菜单或“解决方案资源管理器”的上下文菜单中添加新类 :

“添加新类”对话框的屏幕截图。它具有用于类名、辅助功能、放置声明和实现的文件等的字段。

也可使用类向导来修改或检查现有类。

类向导的屏幕截图,其中包含用于添加方法、成员变量等的选项。

有关详细信息,请参阅用代码向导添加功能 (C++)

重构

可在“快速操作”上下文菜单下,或者通过单击编辑器中的灯泡使用重构。 有的也可从“编辑”>“重构”菜单访问。 这些功能包括:

使用 ClangFormat 和 EditorConfig 强制执行代码样式

Visual Studio 2017 及更高版本附带对 ClangFormat(一种基于 Clang/LLVM 的常用 C++ 代码格式化实用工具)的内置支持。 在快速启动中键入“ClangFormat”,将其设置为使用以下某种常用格式:

  • LLVM
  • Google
  • Chromium
  • Mozilla
  • WebKit
  • Visual Studio

还可以提供自己的 .clang-format_clang-format 文件,以将自定义规则应用于同一级别或更低级别的所有代码文件。

这些文件可以通过源代码管理轻松共享,因此可以在整个开发团队中强制执行编码约定。

显示 .clang 格式文件的屏幕截图,其中包含许多选项,如列限制、缩进宽度、制表符宽度等。

Visual Studio 2017 及更高版本还支持工作方式类似的 EditorConfig。 但是,ClangFormat 的样式选项比 EditorConfig 要多,包括特定于 C++ 的规则。 使用 EditorConfig 创建 .editorconfig 文件,并将其置于代码库的不同文件夹中,以指定这些文件夹及其子文件夹的代码样式 。 .editorconfig 文件会取代父文件夹中的任何其他 .editorconfig 文件,并覆盖通过“工具”>“选项”配置的任何格式设置 。 可以为制表符和空格、缩进大小等设置规则。 有关详细信息,请参阅使用 EditorConfig 创建可移植的自定义编辑器设置

其他格式设置选项

“快速启动”搜索框中提供了用于查找设置或工具的最快方式。 它位于主菜单上。 只需开始键入,自动完成列表即可筛选结果。

“快速启动”搜索框的屏幕截图。它显示搜索 C++“高级”,这会生成文本编辑器选项。

若要设置缩进、括号补全和着色等格式设置选项,请在“快速启动”窗口中键入“C++ 格式设置”。

显示 C++ 格式设置选项的屏幕截图,例如键入制表符时是否自动缩进。

其他格式设置选项位于主菜单中的“编辑”>“高级”下 。

显示高级编辑选项的屏幕截图,例如查看空格、自动换行、注释所选内容、增加行缩进等。

启用和配置 C++ 特定编辑功能的选项位于“工具”>“选项”>“文本编辑器”>“C/C++”下 。 选择想要设置的选项之后,在焦点位于对话框上时按 F1 可获取更多帮助。 如需通用代码格式设置选项,请在“快速启动”中键入 Editor C++

显示所选的 Visual Studio 菜单项“工具”的屏幕截图,并突出显示了“选项”菜单项。

文本编辑器 C++ 实验对话框中可找到实验性功能,未来版本的 Visual Studio 中不一定包含这些功能。 在 Visual Studio 2017 及更高版本中,可在此对话框中启用“预测 IntelliSense”。

另请参阅

阅读并理解 C++ 代码
在 Visual Studio 中导航 C++ 代码库
使用适用于 C++ 的 Live Share 进行协作