ReSharper C⁠+⁠+ 2026.1 最新变化

ReSharper C⁠+⁠+ 2026.1 缩短了启动时间,并降低了内存使用率。 此版本增加了对 C⁠+⁠+⁠26 #embed 指令和其他新语言功能的支持。 编码辅助改进包括 C++20 模块的自动导入和新增的后缀补全场景。 Unreal Engine 开发者可以利用改进的蓝图集成,以及针对即将推出的 Unreal Engine 5.8 的兼容性修正。

性能

ReSharper C⁠+⁠+ 2026.1 为 IDE 体验的所有阶段带来了显著的性能优化,专门针对大型 Unreal Engine 项目的需求进行了调整。 我们在 Out-of-Process(进程外)模式下对 Unreal Engine 的 Lyra 示例项目进行了测试,结果表明以下方面有所改进:

  • C⁠+⁠+ 代码初始索引的速度提升了高达 20%,缩短了首次打开解决方案时的等待时间。
  • 暖启动时间得到改进,速度提升了 20% 以上,因此返回之前打开的解决方案的速度明显变快。
  • 暖启动后的后端内存占用率减少了 21% 之多,为您其余的工作流留出了更多资源。

语言功能

ReSharper C⁠+⁠+ 现在支持 C⁠+⁠+⁠26 和 C23 中引入的 #embed 预处理器指令。 借助此指令,您可以直接将二进制资源文件的内容嵌入到源代码中,而无需使用外部工具或生成代码。

此版本还添加了对另外两个语言功能的支持:

  • _Countof 运算符:ReSharper C⁠+⁠+ 现在可以识别 C2Y(即将推出的 C 标准)中的 _Countof 运算符,该运算符可以返回数组的元素数量。
  • 扩展浮点类型:现在支持 C⁠+⁠+⁠23 中标准化的 bfloat16_tfloat16_tfloat128_t 浮点类型。

ReSharper C⁠+⁠+ 2026.1 改进了与编译器特定扩展程序的兼容性:

  • 嵌套函数:ReSharper C⁠+⁠+ 现在支持用 C 代码在其他函数中定义函数的 GCC 扩展函数。
  • _Nullable/_Nonnull 限定符:解析器现在可识别 Clang 的指针 null 性限定符。

编码辅助

ReSharper C⁠+⁠+⁠⁠ 现在支持自动导入 C⁠+⁠+⁠20 模块,可减轻认知负担。 当您使用已导出的符号、但缺少相应的 import 声明时,IDE 现在会提供智能建议,自动插入声明。 目前,自动导入功能仅支持用于直接从主模块接口单元和模块分区导出的符号。

后缀补全扩展为涵盖以下场景:

  • 基元类型:后缀补全之前仅适用于类和结构体类型, 现在还可处理基元类型的表达式,如 intboolfloat
  • 字面量:后缀补全现在可在字面量后使用,例如输入 42.cos 会展开为 cos(42)
  • 用户自定义字面量后缀:代码补全功能现在可用于用户自定义的字面量运算符。 当您输入后接 _ 的字面量时,ReSharper C⁠+⁠+ 会建议当前作用域内可见的匹配 operator"" 后缀。

两项自动缩进改进可带来更流畅的编辑体验:

  • 现在,如果在控制流语句或类定义的大括号之间按 Enter 键,即使存在属性(例如 class [[deprecated]] MyClass {}),IDE 也能以适当的缩进正确定位光标。
  • extern 块内的自动缩进现在遵循缩进链接规范块成员格式设置。

Unreal Engine

ReSharper C⁠+⁠+ 2026.1 改进了蓝图支持:

  • Code Vision 中的 BlueprintPure:Code Vision 现在除了识别标有 BlueprintCallable 的函数外,还能识别标有 BlueprintPure 说明符的函数。
  • Code Vision 中的事件实现:Code Vision 现在可检测 Blueprint 资产中 BlueprintNativeEventBlueprintImplementableEvent 函数的实现。
  • 委托属性的查找用法Find Usages(查找用法)现在可发现 BlueprintAssignable 委托属性在蓝图侧的绑定。
  • 提高了蓝图搜索准确性:蓝图引用的 Find Usages(查找用法)现在按资产路径(而不是蓝图名称)进行搜索。 这意味着,如果您的项目包含多个同名蓝图,搜索结果将不再含糊不清。

ReSharper C⁠+⁠+ 现在默认对 Unreal Engine 插件进行索引。 随着 Unreal Engine 项目中插件使用量的增加,以及近期性能的提升,默认对插件进行索引可开箱即用地提供更出色的代码分析和导航功能。 您可以在 Settings(设置)中的 ReSharper | Options | Code Editing | C/C⁠+⁠+ | Unreal Engine(ReSharper | 选项 | 代码编辑 | C/C++ | Unreal Engine)页面上恢复之前的行为。

ReSharper C⁠+⁠+ 还支持即将发布的 Unreal Engine 5.8 中的 UnrealHeaderTool 变更。 特别要注意的是,DECLARE_DYNAMIC_MULTICAST_DELEGATE 宏不会再在代码分析中触发误报错误。

如果您对用于 Unreal Engine 开发的独立跨平台 IDE 感兴趣,请选择 Rider。 Rider 中的 Unreal Engine 支持与 ReSharper C⁠+⁠+ 保持一致,您可以在 Rider 2026.1 更新中期待相同改进。

代码分析

ReSharper C⁠+⁠+ 2026.1 更新了捆绑的 Clang-Tidy 二进制文件,引入了 LLVM 22 版本中的最新检查和增强功能。

新增的检查功能可检测出指定初始值设定项的出现顺序与结构体中对应成员的声明顺序不一致的情况。 由于 C⁠+⁠+⁠20 要求指定初始值设定项遵循声明顺序,因此,如果初始值设定项顺序错误,将导致编译错误。 ReSharper C⁠+⁠+ 现在会标记出此类情况,并提供快速修复,以自动重新排列初始值设定项列表的顺序,使其与结构体定义保持一致。

另一项新增的检查功能会在函数访问级别(publicprotectedprivate)与其在基类中重写的虚拟函数的访问级别不同时发出警告。 虽然 C⁠+⁠+ 允许更改重写的访问级别,但这样做往往并非有意为之,并可能导致意外行为。 该检查功能可帮助捕捉这些不易察觉的不匹配情况。

此版本将 Unused symbol(未使用符号)检查扩展到 .cpp 源文件中定义的类成员。 此前,这些成员被假定为外部可见,并被排除在 Unused symbol(未使用符号)分析之外。 现在,会按照与分析 static 函数和匿名命名空间成员时采用的方式对其进行分析。

导航

我们优化了 C⁠+⁠+ 文件中的装订区域标记,帮助您用最少的工作量浏览并理解复杂的代码库。

  • 带语义高亮显示的工具提示:将光标悬停在装订区域标记上方时出现的工具提示现在提供语义高亮显示功能,显示内容一目了然,易读性更强。
  • 导航到基类:类定义上新增了装订区域图标,利用该图标,您可在继承层次结构中向上导航至基类,对现有的用于导航至派生类的标记进行了补充。

Go to Declaration(转到声明)和其他导航操作现在除了可用于类型名称之外,还可用于大括号初始化表达式中的左大括号(例如 MyStruct { 1 })。

Visual Studio 集成

ReSharper C⁠+⁠+ 工具提示现已在 Visual Studio 2026 中可用,恢复了初始 Visual Studio 2026 兼容版本中缺失的对工具提示的支持。 工具提示的展示也得到了改进:现在可借助图标区分符号类型,并且主题支持功能也得到了增强。

ReSharper 中的多个编辑器 UI 元素已更新,以更好地与 Visual Studio 的现代外观保持一致。

重新设计后,代码补全 UI 现在可以在编辑器内呈现更简洁且更一致的外观。

我们还对部分相关的 UI 组件进行了现代化升级,包括参数信息弹出窗口工具提示其他编辑器弹出窗口,以替换过时的视觉效果,并改进它们在不同主题和 DPI 设置下的外观。

更新后的 UI 现在支持 Visual Studio 的编辑器缩放功能,从而确保在缩放级别改变时,补全列表和参数信息能够正确缩放显示。

ReSharper C⁠+⁠+ 2026.1 修复了项目模型存在的几个问题:

  • Windows 启动程序套件 (WDK) 项目:ReSharper C⁠+⁠+ 现在可正确识别 WDK 特定的平台工具包,并提供适当的默认预处理程序定义。
  • WinUI 3 项目:Include 路径现已正确组态。
  • 类型库的库目录:ReSharper C⁠+⁠+ 现在根据 Visual Studio 项目设置中配置的库目录解析 COM 类型库文件 (.tlb)。

查看 ReSharper 最新变化页面,了解此版本中引入的所有其他更改。