Ohhnews

分类导航

$ cd ..
Jetbrains Blog原文

ReSharper C++ 2026.2发布:支持C++26反射、ISPC语言及更多功能

#resharper c++#c++26反射#ispc语言支持#unreal engine#代码分析

ReSharper C++ 2026.2 已发布,带来了对 C++26 反射的初始支持,这是近年来 C++ 语言最受期待的新增特性。

此版本还在 ReSharper 中引入了 ACP 代理支持,Junie 作为首个可用代理,新增了对 ISPC 语言的支持,并显著加快了 Unreal Engine 项目中的索引速度。其他亮点包括 constexpr 求值器的更新、新的代码检查以及重构增强功能。

如果您想探索完整的更新集,请查看 ReSharper C++ 2026.2 新特性 页面。在本文中,我们将介绍最重要的更改和改进。
下载 ReSharper C++ 2026.2

C++ 支持

C++26 反射

此版本的重头戏是 C++26 反射,这是一个期待已久的语言特性,支持编译时内省和代码生成。

通过此次更新,ReSharper C++ 识别核心反射原语:

  • ^^(反射)运算符,生成表示被反射实体的 std::meta::info 值。
  • [: ... :](拼接)语法,将反射值转换回语言构造。
  • 对反射类型、成员、枚举器及其他实体的编译时查询。

[LOADING...]

在主流 C++ 编译器中,目前只有 GCC 16 支持 C++26 反射。现在立即在 Visual Studio 中体验 C++26 反射的一种方法是创建一个 Linux C++ 项目 ,并使用包含 GCC 16 的 Linux 发行版(如 Fedora 44)通过 WSL 进行编译。

相关 C++26 特性

对反射的支持由两个相关的 C++26 语言特性补充:

  • ReSharper C++ 现在支持 consteval { ... },它们在编译时求值,并可以将声明注入到封闭作用域中。consteval 块提供了一种干净的方式来触发编译时副作用,使得它们对于使用反射的实用元编程特别有用。

[LOADING...]

  • 用户定义的注解现在可以附加到声明上,并通过反射 API 查询,支持自定义元数据驱动的代码生成。

[LOADING...]

constexpr 求值

我们还更新了 constexpr 求值器,增加了两个重要能力:

  • 求值器现在支持常量求值期间的动态内存分配——这是 C++20 引入的特性。这使得能够正确求值使用 new/delete 或标准容器(如 std::vectorstd::string)的 constexpr 代码。
  • 求值器现在支持 C++26 constexpr 异常,并处理常量求值期间的 try/catchthrow 表达式。

ISPC 语言支持

我们新增了对 ISPC(Intel SPMD Program Compiler)的支持,这是一种专为 CPU 上高性能并行编程而设计的语言。ISPC 基于 SPMD 编程模型,编写的代码看起来像是标准的串行程序,但在运行时,多个程序实例在目标硬件上并行执行。ISPC 广泛应用于游戏引擎、渲染系统和科学计算,包括 Unreal Engine 项目。 [LOADING...]

ReSharper C++ 现在为 ISPC 文件提供语法高亮、代码分析、导航和编码辅助,为您在 ISPC 代码中带来与 C++ 同等质量的编辑器支持。

Unreal Engine

性能

此版本在 Unreal Engine 项目启动期间带来了重大的性能改进。ReSharper C++ 现在使用来自 UnrealBuildTool 的项目信息来加速初始索引,仅分析 Unreal Engine 项目模型中包含的文件。结合其他优化(包括多线程索引的改进),这带来了显著的加速效果。 [LOADING...]

根据我们在 Lyra 示例解决方案上的测量:

  • C++ 代码的初始索引速度提升高达 55%。
  • 热启动期间加载 C++ 缓存的速度提升高达 35%。

您可以通过取消选中 Code Editing | C/C++ | Unreal Engine 设置页面上的 仅索引 Unreal Engine 项目模型中的文件 选项来禁用新的索引行为。

Blueprint 支持

Blueprint 支持也进行了重大改造,显著缩短了索引时间。在 Lyra 示例解决方案上,Blueprint 索引速度提升高达 40%,但您项目中的具体加速取决于资产的结构。

ReSharper C++ 现在还能发现 Blueprint 资源内游戏标签的用法,并将其显示在 Code Vision查找用法 结果中,让您全面了解游戏标签在整个项目中的使用位置。

代码分析

内部链接

新的 实体可具有内部链接 检查会检测不在其翻译单元外部使用的函数、变量和类。您可以使用提供的修复将此类实体标记为 static 或将其移入匿名命名空间,这有助于编译器优化并防止意外的链接冲突。 [LOADING...]

聚合初始化中的指定初始化器

ReSharper C++ 现在建议在聚合初始化的花括号初始化列表中添加指定符。指定初始化器自 C++20 和 C99 起可用,它使每个初始化器对应的成员明确,提高了代码可读性,并减少了成员重新排序时出错的可能性。还提供了相应的上下文操作,即使检查被禁用也可使用。 [LOADING...]

对重写基函数的调用

另一个新检查会检测对派生类中重写的基类虚函数的限定调用。直接调用基类虚函数而不是通过虚分发可能会引入细微的 bug,此检查有助于捕获此类情况。 [LOADING...]

[[jetbrains::used_implicitly]] 属性

ReSharper C++ 现在识别 [[jetbrains::used_implicitly]] 属性,可以将其应用于符号以抑制会建议更改其签名或链接的检查。这对于通过反射、代码生成或其他静态分析不可见的机制使用的符号非常有用。 [LOADING...]

编码辅助

重构改进

两项重构改进使代码重组更加容易:

  • 对函数声明调用 内联函数 现在会内联整个代码库中该函数的所有用法,而不仅仅是光标下的用法。
  • 提取方法 重构现在可在 lambda 体内使用,允许您将 lambda 的一部分提取为单独的函数。

上下文操作

新的上下文操作有助于日常任务:

  • 新的上下文操作让您可以轻松切换成员函数上的 const 限定符。
  • 您现在可以快速插入 #pragma clang diagnostic ignored 指令,以抑制当前行上的特定 Clang 诊断。
  • 在 Unreal Engine 项目中,您可以从 复制代码引用 菜单中复制当前打开头文件的包含路径,从而轻松粘贴正确的 #include 指令。

告诉我们您的想法

本文介绍了主要亮点,但如果您想了解这些改进的完整细节,请前往 ReSharper C++ 2026.2 新特性 页面。

下载最新版本,并告诉我们它在您的项目中的表现如何。
下载 ReSharper C++ 2026.2