JetBrains Rider 2025.2 Help

C++ 的重构

执行重构

  1. 将插入符号放在符号处,选择您想要重构的代码片段,或在工具窗口中选择一个项目。

  2. 请执行以下操作之一:

    • 从主菜单中选择 重构 ,然后选择所需的重构。 此菜单中可用的重构列表取决于当前上下文。 如果 JetBrains Rider 无法为上下文建议任何重构,则整个菜单将被禁用。

    • 从主菜单中选择 重构 | 执行重构 ,或按 Ctrl+Alt+Shift+T 显示适用的重构列表,然后选择其中一个。 您还可以在选择的上下文菜单中选择 重构此内容

    • 使用默认键盘快捷键(Windows、Linux/(macOs )分配给特定重构的快捷键,或 分配自定义快捷键 给您喜欢的重构命令。

  3. 如果所选的重构需要用户输入,将会打开重构向导。 请注意,向导的对话框不是模态的,因此您可以在向导打开时编辑代码。

  4. 如果重构操作会导致代码冲突(例如重复的名称、可见性冲突等),向导会在最后一步显示冲突列表,然后您再应用重构。 对于某些冲突,向导还可以建议快速修复。 如需了解更多信息,请参阅 解决重构中的冲突

  5. 重构完成后,所有更改(包括其他文件中的更改)都会作为单个操作注册。 因此,您可以使用 撤销 操作 Ctrl+Z ,通过单个按键撤销所有这些更改。

在您修改编辑器中的代码后,某些重构功能会立即可用。 如需了解更多信息,请参阅 就地重构

更改签名

更改签名重构允许您对函数的签名进行一种或多种不同的修改。 所有的用法、实现和重写都会相应更新。

您还可以使用专用快捷键 Ctrl+F6 调用此重构。

更改 C++ 函数的签名

转换为作用域枚举

转换为作用域枚举 重构帮助您将 C 风格的枚举声明转换为 C++11 作用域枚举。 要调用此功能,请将插入符号放在枚举器上,然后从 重构此内容 菜单中选择 转换为作用域枚举 ,或从主菜单中选择 重构 | 转换 | Unscoped Enum 到 Scoped Enum

JetBrains Rider:转换为 Scoped Enum

提取方法

此重构允许您基于选定的代码片段创建一个新方法。 JetBrains Rider 会分析选定的语句,并检测可以转换为方法参数或表示其返回值的变量。

您还可以使用专用快捷键 Ctrl+Alt+M 调用此重构。

假设您希望将计算判别式的逻辑提取到一个单独的方法中:

C++ 中提取方法:选择表达式

提取方法 对话框中,您可以选择方法参数、返回值并预览生成的方法:

C++ 中提取方法:指定方法详细信息

一旦您点击 下一步 ,新方法就会被创建,并且选定的表达式会被方法调用替换。

C++ 中提取方法:提取的方法

引入字段

此重构允许您基于选定的表达式创建一个新字段,用该表达式或构造函数初始化它,并将当前类型中表达式的出现替换为新引入字段的引用。

您还可以使用专用快捷键 Ctrl+Alt+F 调用此重构。

在下面的示例中,我们使用此重构将两个相同字符串的出现替换为一个新的私有字段,并从现有构造函数中对其进行初始化:

#include <exception> #include <iostream> class ErrorHandler { ErrorHandler() { } public: void logError(std::exception& e) { auto errorLogFIle = fopen("log.txt", "w"); fprintf(errorLogFIle, "Something has failed: %s", e.what()); fclose(errorLogFIle); } void printError(std::exception& e) { printf("Something has failed: %s", e.what()); } private: };
#include <exception> #include <iostream> class ErrorHandler { ErrorHandler(): error_message("Something has failed: %s") {} public: void logError(std::exception&; e) { auto errorLogFIle = fopen("log.txt", "w"); fprintf(errorLogFIle, error_message, e.what()); fclose(errorLogFIle); } void printError(std::exception& e) { printf(error_message, e.what()); } private: const char* error_message; };

引入命名空间别名

此重构帮助您为命名空间的使用创建一个命名空间别名,并将当前选定的使用或文档中的所有使用替换为该别名。 根据选定的用法,命名空间别名会在尽可能接近用法的作用域内声明。

要调用此重构,请将插入符号放在命名空间使用处,然后选择 Ctrl+Alt+Shift+T 或从主菜单中选择 重构 | 重构此项… ,然后在 重构此内容 弹出窗口中选择 引入命名空间别名。 如果文档中存在命名空间使用的多个出现,您可以选择替换当前使用或所有使用。

在下面的示例中,我们使用此重构为 SpaceOne::SpaceTwo 命名空间添加一个命名空间别名。

namespace SpaceOne { namespace SpaceTwo { int ten = 10; inline void foo() { // do something } } } inline int test() { SpaceOne::SpaceTwo::foo(); return SpaceOne::SpaceTwo::ten; }
namespace SpaceOne { namespace SpaceTwo { int ten = 10; inline void foo() { // do something } } } inline int test() { namespace s_two_alias = SpaceOne::SpaceTwo; s_two_alias::foo(); return s_two_alias::ten; }

引入/内联 typedef

引入 typedef 重构让您可以快速为选定的数据类型创建一个 typedef ,并将选定的数据类型以及(可选)当前文件中该数据类型的所有出现替换为新创建的 typedef

内联 typedef 重构则完全相反——它会移除选定的 typedef ,并将其所有使用替换为声明的数据类型。

JetBrains Rider:在 C++ 中引入/内联 typedef 重构

If you want the 引入 typedef refactoring to use type alias instead of typedef, select the corresponding checkbox on the 语言与框架 | C++ | 代码样式 page of JetBrains Rider 设置 Ctrl+Alt+S. 有关更多信息,请参阅 Microsoft Docs 上的别名和 typedef(C++)

引入使用枚举

C++20 使用 enum 语法允许您从目标枚举中添加所有枚举器。 因此,使用其成员枚举器时,您可以省略枚举名称的重复。

引入使用枚举 重构帮助您添加 使用 enum 语句。 要调用此重构,请将插入符号放在枚举器上,然后按 Ctrl+Alt+Shift+T 或从主菜单中选择 重构 | 重构此项… ,然后在 重构此内容 弹出窗口中选择 引入使用枚举。 如果文档中有多次枚举使用的出现,您可以选择是替换当前使用还是所有使用。

JetBrains Rider:引入 Using Enum

引入变量

此重构允许您基于选定的表达式创建一个新的局部变量,用该表达式初始化它,并最终将方法中表达式的所有出现替换为新引入变量的引用。

您还可以使用专用快捷键 Ctrl+Alt+V 调用此重构。

JetBrains Rider:引入变量

内联变量

此重构允许您将代码中变量的所有出现替换为其初始化器。 请注意,仅当变量值在初始化后保持不变时才应应用此重构。

您还可以使用专用快捷键 Ctrl+Alt+N 调用此重构。

Inline Function(内联函数)

此重构允许您用函数的主体替换函数调用。 JetBrains Rider 将执行必要的转换,处理所有名称冲突,并重新格式化生成的代码,或者向您显示一个简短的弹出消息,解释为什么尝试内联某些方法不是一个好主意。

您还可以使用专用快捷键 Ctrl+Alt+N 调用此重构。

Inline Function(内联函数)

内联宏

此重构允许您替换代码中宏的所有使用。 重构还会报告需要手动检查的宏体和宏参数中的潜在使用。

您还可以使用专用快捷键 Ctrl+Alt+N 调用此重构。

内联宏

重命名

支持 C++ 的最耗时的重构之一。 如果您尝试手动修改符号的名称,可能会导致许多问题。 当您调用 重命名重构 (也可以通过专用快捷键 Shift+F6 调用)时,JetBrains Rider 会完成所有检查。 如果没有冲突,所有修改都会顺利完成;否则,您会获得冲突列表,您可以手动解决这些冲突,以确保仅进行必要且适当的更改。

JetBrains Rider:重命名

当您使用此重构重命名类时,JetBrains Rider 会自动重命名相应的文件(源文件和头文件)。

您还可以在解决方案资源管理器中对文件调用此重构。 一旦您为文件提供了新名称,JetBrains Rider 会更新其在 include 中的所有使用。

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