ReSharper 2025.2 Help

C++ 的编码辅助

大多数 ReSharper 的编码辅助功能也支持 C++。 您可以在 编码辅助 部分的相应主题中找到关于这些功能的详细信息。 在该部分的主要主题中,您还可以找到功能矩阵并检查 C++ 中具体支持的内容。

在本主题中,您可以找到一些在 C++ 中使用编码辅助功能的示例。

默认情况下, 代码检查快速修复上下文操作 在所有解决方案文件中可用。 If necessary, you can enable these features in external files referenced from the solution with the 启用检查、快速修复和上下文操作,以解决方案外部的文件 checkbox on the 代码编辑 | C++ | 检查 page of ReSharper 选项 Alt+R, O .

当您使用自定义编译器工具链时,提供额外的编译属性可能对更好的编码辅助有所帮助。 要指定编译属性,请在解决方案资源管理器中选择您的项目,然后转到属性中的 ReSharper 部分。 您可以指定额外的包含目录、添加预处理器定义以及设置语言标准:

ReSharper C++:附加项目属性

设置将保存在项目文件旁边的 .vcxproj.DotSettings 文件中。 请注意,这些附加属性不会影响编译。

代码补全

自动和基本补全

在 C++ 文件中,您可以在编写代码时使用 自动基本 Control+Space 补全。 例如,您可以快速添加来自不同命名空间的枚举成员:

C++ 中的自动补全

所选的补全项会显示一个带有语法高亮签名和文档的弹出窗口。 If necessary, you can disable this popup by clearing the 显示摘要 checkbox on the 环境 | IntelliSense | 补全外观 page of ReSharper 选项 Alt+R, O .

C++ 中的基本补全

导入符号补全

当您想要使用的符号未通过相应的 #include 导入到当前文件中,但它已在标准库或解决方案的其他位置定义时,您可以按 Control+Alt+Space 快速在补全建议中找到该符号:

ReSharper:C++ 中的导入符号补全

Optionally, you can include import symbol suggestions in the suggestion lists of automatic and basic completion by selecting 在基本补全中显示导入条目 on the 代码编辑 | C++ | 检查 page of ReSharper 选项 Alt+R, O .

请注意,这会带来性能影响(因为每次 ReSharper 构建补全列表时,都需要查看解决方案中的所有符号以进行匹配),因此默认情况下是禁用的。

点/箭头补全助手

当您调用方法时,您始终可以键入点 . 或箭头 -> 并在补全列表中获取所有可用的方法。 与 ./-> 不匹配的方法以灰色显示。 如果您选择了这样的一个方法, ./-> 将自动更正:

在补全中将点替换为箭头

生成式补全

生成式补全 建议也可用。 例如,当您在对象上调用成员函数声明时...

C++ 中的生成式补全

ReSharper 会生成以下函数:

C++ 中的生成式补全

后缀补全

C++ 中的后缀补全非常类似于 C# 的扩展方法。 如果您在表达式后键入点 . 或箭头 -> ,ReSharper 将建议可以将该表达式作为第一个参数接受的自由函数。 当您接受建议时,ReSharper 会重写您的代码,使表达式作为第一个参数传递:

ReSharper C++:后缀模板

后缀补全还包括 后缀模板 ,它不是查找合适的方法,而是让您快速用常用的语言构造包装表达式。

代码补全中的自由函数

一个常见的 C++ 编码实践是优先使用非成员非友元函数而不是成员函数。 这是提高封装性并尽可能保持类接口最小化的好方法。 当您在表达式后输入点号 . 或箭头 -> 时,接受该表达式作为第一个参数的自由函数将在成员函数之后的补全列表中被建议:

ReSharper C++:代码补全中的自由函数

如果您不希望在补全建议中包含自由函数,可以清除 ReSharper 选项 的 Alt+R, O 页面上的相应复选框 代码编辑 | C/C++ | 代码完成

依赖代码中的代码补全

ReSharper 会自动使用默认模板参数为依赖代码提供补全建议。 在模板主体中键入时,如果没有参数的类型信息,代码补全可能不可用。 但是,对于具有默认参数的模板参数,ReSharper 将基于这些默认参数提供补全建议。

ReSharper C++:依赖代码中的代码补全

导入项的代码补全

当启用 导入符号补全 时,ReSharper 的补全列表还会建议当前文件中未包含的头文件中的项。 如果一个类未包含在当前文件中,补全列表将建议两个选项:插入 include 指令或添加前向声明。 默认情况下会显示包含这两个选项的上下文菜单,但您可以在 ReSharper 选项 的 代码编辑 | C/C++ | 代码完成 页面上更改默认行为 Alt+R, O

ReSharper C++:导入项的代码补全

完整语句

完整语句 功能会插入所需的语法元素,并将插入点放置在可以开始键入下一条语句的位置。 它允许您使用 Control+Shift+Enter 快捷键,而无需执行许多其他小操作。 例如,此快捷键会自动插入大括号和分号,然后将插入点放置在您可以继续编写主体的位置:

ReSharper C++:完整语句

语法高亮和工具提示

默认情况下,ReSharper 提供可配置颜色的扩展 C++ 语法高亮。 如果需要,您可以在 ReSharper 选项的 代码编辑 | C++ | 检查 页面上禁用它。 您可以以不同方式高亮显示 20 种标识符类型。 您可以随时在 Visual Studio 选项中更改颜色和字体(工具 | 选项 | 环境 | 字体和颜色)。

配置 C++ 标识符的语法高亮
配置 C++ 标识符的语法高亮

ReSharper 还会用其自己的工具提示替换 Visual Studio 的代码元素工具提示,这些工具提示具有高亮语法、显示方法和字段签名、格式化的 XML 和 Doxygen 注释:

ReSharper:C++ 中的编辑器工具提示

如果需要,您可以通过清除 ReSharper 选项的 环境 | 编辑器 | Visual Studio 功能 页面上的 为 C++ 替换 Visual Studio 工具提示 复选框来禁用 ReSharper 工具提示。

参数信息

无论您是在编写还是研究一个函数调用,ReSharper 都会帮助您查看该函数所有重载的允许参数的详细信息。 在弹窗中,您将看到所有包含参数的公共签名,以及来自函数 XML 文档的简要描述(如果可用)。

当您输入参数时,ReSharper 会自动高亮与已输入参数兼容的下一个签名,并将不适用的签名灰显。 要研究现有函数调用的其他签名,请将插入符号放置在函数的括号内,然后按 Control+P 或从主菜单中选择 ReSharper | 编辑 | 参数信息

ReSharper C++:参数信息

参数信息工具提示还提供有关聚合类成员在执行聚合初始化时的详细信息,显示用户定义的二元运算符、已删除函数和隐式生成函数的信息。

在依赖代码中,它从文档注释中获取模板参数的描述,并使用默认模板参数提供有关依赖代码中参数的信息。

ReSharper C++:依赖代码的参数信息

参数信息工具提示可以在 ReSharper 选项 的 环境 | 智能感知 | 参数信息 页面上进行配置 Alt+R, O

重新排列代码

重排代码 可快速移动代码元素,扩展或缩小当前范围等。 要重排代码,请在您想要移动的代码元素或选区上按 Ctrl+Shift+Alt ,然后按任意方向键。 如果您在未先选择内容的情况下调用此命令,可移动的元素会自动被选中。

左移右移 有两种模式,允许您:

  • 重排通常写在单行中的元素(尽管它们也适用于写在多行中的元素)。 您可以在带大括号的初始化列表中,以及函数或 lambda 参数和参数等元素上使用 左移右移

    ReSharper C++:重排参数
  • 将语句或声明移动到直接跟随它的区域(右移 )或当前区域之外(左移):

    ReSharper C++:将一行移动到下一个区域

上移下移 命令在特定范围内上下重排元素,或在相邻范围之间重排元素。 您可以在语句和声明、switch 语句中的部分、枚举器、try-catch 语句中的 catch 部分、if 语句中的条件或分支等上使用 上移下移 命令。

ReSharper C++:重排 if 语句

您还可以上下移动开括号或闭括号,以扩展或缩小当前复合语句、类型或命名空间:

ReSharper C++:更改命名空间范围

适用情况的完整列表:

向左移动和向右移动

向上移动和向下移动

  • 将语句和声明从当前范围移出并移入后续范围

  • 赋值、二元、折叠或条件表达式中的操作数

  • switch 语句中的 case 标签

  • 下标表达式或数组说明符中的索引

  • 函数/lambda 参数和参数

  • 宏参数和宏调用参数

  • 模板参数和参数

  • 声明中的声明符和结构化绑定

  • 基类型

  • 带大括号的初始化列表中的元素

  • 异常规范中的类型

  • Doxygen HTML 属性

  • C++/CLI 泛型约束中的项

  • Lambda 捕获

  • 成员初始化器

  • using 声明中的部分

  • 周围范围内的语句和声明

  • 枚举 声明中的枚举器

  • 复合 如果 语句中的分支

  • 嵌套 如果 语句中的条件

  • requires 表达式主体中的需求

  • 从 if-else、try-catch 语句的一个子句或 switch 的一个部分移动到另一个部分的语句

  • 语句和声明中的开括号和闭括号(贪婪括号)

  • switch 语句中的 switch 部分

  • try-catch 语句中的 catch 部分

  • Doxygen 命令

  • C++/CLI 泛型约束

上下文操作

ReSharper 提供一组针对 C++ 代码的 上下文操作。 您可以在 ReSharper 选项 的 代码编辑 | C++ | 上下文操作 页面上找到这些操作的完整列表。 如果需要,您还可以通过此页面禁用某些操作。

一旦某个上下文操作在当前光标位置可用,ReSharper 会在光标左侧显示相应的 操作指示器 ThemedIcon.ContextAction.Screen.(Gray).png。 然而,有时 ReSharper 会为当前光标位置提供多个上下文相关的功能。 在这种情况下,会显示与优先级最高的操作对应的操作指示器,其他所有操作仅在您通过单击操作指示器或按下 Alt+Enter 展开 操作列表 时才会出现。上下文操作的优先级最低,因此它们通常出现在操作列表的底部。

以下是一些 C++ 上下文操作的示例:

将枚举转换为字符串(生成枚举到字符串的助手)

此上下文操作为特定枚举生成一个助手函数,将其枚举器转换为相应的字符串。

例如,如果您在以下枚举上调用此操作:

enum class Suit { Diamonds, Hearts, Clubs, Spades };

ReSharper 将为您生成以下函数:

const char* to_string(Suit e) { switch (e) { case Suit::Diamonds: return "Diamonds"; case Suit::Hearts: return "Hearts"; case Suit::Clubs: return "Clubs"; case Suit::Spades: return "Spades"; default: return "unknown"; } }

如果需要,您可以通过 编辑 ReSharper 用于生成的 enum_to_string 活动模板来自定义生成的函数。 例如,您可以配置模板以生成流输出运算符重载:

std::ostream& operator <<(std::ostream& out, Suit e) { switch (e) { case Suit::Diamonds: return out << "Diamonds"; case Suit::Hearts: return out << "Hearts"; case Suit::Clubs: return out << "Clubs"; case Suit::Spades: return out << "Spades"; default: assert(false); return out << "unknown"; } }

生成缺失的 case 语句

在切换枚举时,您可以使用上下文操作生成所有缺失的 case 语句,而不是手动编写所有 case 语句:

在 C++ 中生成缺失的 case 语句

然后,您只需为每个语句编写所需的逻辑。

在 C++ 中生成缺失的 case 语句

合并嵌套的 'if' 语句

ReSharper 使用上下文操作帮助您合并嵌套的 'if' 语句:

在 C++ 中合并嵌套的 'if' 语句

生成实现

ReSharper 帮助您自动创建函数或方法的存根实现。 您始终可以生成内联实现,如果函数定义在头文件中并且存在相应的源文件,您可以在源文件中生成实现。

为函数生成实现

将实现移出类范围

ReSharper 帮助您将函数或方法的实现从头文件移动到相应的源文件(如果存在)。 应用此上下文操作后,定义将保留在原始位置,而实现将被移动到源文件。 编辑器上下文也会切换到源文件。

将实现从类范围移到源文件

您还可以使用上下文操作移动当前选区中的所有实现。

文档实体

使用此上下文操作,您可以为 C++ 符号生成文档注释。 如果需要,您可以通过 编辑 ReSharper 用于生成的 doc 活动模板来自定义注释存根。

ReSharper:生成文档注释

此操作也可以通过专用快捷键 Control+/ 和菜单: ReSharper | 编辑| 文档 使用。

高亮配对项

当您将插入点放置在配对项之一时,ReSharper 会高亮显示各种匹配项:

  • 匹配分隔符()[]{}<>

  • 匹配宏,例如, 开始命名空间/结束命名空间

  • 匹配 打印boost::format 中的格式说明符和参数

最后修改日期: 2025年 9月 27日