Dev48
ЯЗЫК
  • О нас
  • Услуги
  • Индустрии
  • Технологии
  • Статьи
  • Контакты
Забронировать звонок
    Главная/Статьи/Resharper c 20263 struktura klassov analiz strok formatirovaniya i mnogoe drugoe
Dev48
info@dev48.org+375 29 320-40-96WhatsApp@isky_by

© 2026 · Все права защищены.

ReSharper C++ 2026.3: структура классов, анализ строк форматирования и многое другое

Источник: The JetBrains Blog•10 ноября 2026 г. в 18:20

ReSharper C++ 2026.3: структура классов, анализ строк форматирования и многое другое

Вышла версия ReSharper C++ 2026.3, в которой появилось новое окно инструмента Class Layout, визуализирующее макет памяти ваших классов и помогающее находить неиспользуемое пространство. В этом выпуске также улучшен анализ строк форматирования для поддержки std::format, std::print и библиотеки…

Расширение Visual Studio для разработки на C++

Новости релизов .NET Tools Resharper C++

Вышла версия ReSharper C++ 2026.3, в которой появилось новое окно инструмента Class Layout, визуализирующее макет памяти ваших классов и помогающее находить неиспользуемое пространство.

В этом выпуске также улучшен анализ строк форматирования для поддержки std::format, std::print и библиотеки {fmt}. Среди других нововведений — обновления рефакторингов Change Signature и Extract Method, а также новые инспекции CUDA.

Макет класса

То, как класс расположен в памяти, определяет, сколько места занимает каждый объект, насколько хорошо его данные помещаются в строки кэша процессора и соответствует ли он двоичному формату или ABI, общему с другим кодом. Чтобы удовлетворить требования выравнивания, компилятор неявно вставляет заполнение (padding) между полями. В результате класс может оказаться существенно больше суммы его членов. Это может быстро накапливаться для объектов, выделяемых в больших количествах или обрабатываемых в тесных циклах.

Новое окно инструмента Class Layout визуализирует макет памяти класса, структуры или объединения, включая смещение и размер каждого поля и битового поля, подобъектов базовых классов, указателей на виртуальные таблицы и заполнения между ними. Это позволяет легко находить пустое пространство, которое можно убрать, проверять эффект от ключевого слова alignas или директивы #pragma pack, а также понимать расположение классов в сложной иерархии. Чтобы открыть окно инструмента, установите курсор на имя класса или любую ссылку на тип класса, а затем выберите ReSharper | Inspect | Class Layout. Кроме того, можно выбрать пункт Class Layout в меню Alt+Enter.

Рефакторинги

Изменение сигнатуры конструкторов

Рефакторинг Change Signature теперь работает с конструкторами. Вы можете добавлять, удалять, менять местами и изменять типы параметров конструктора, а ReSharper C++ обновляет вызовы конструктора по всему вашему коду, включая прямую и списочную инициализацию, выражения new, инициализаторы членов и базовых классов, а также фабричные функции, такие как std::make_unique. Диалоговое окно Change Signature также содержит две новые опции, которые позволяют добавлять или удалять спецификатор static для функций и explicit для конструкторов.

Примечание: Некоторые вызовы конструкторов, такие как неявные преобразования или вызовы через пользовательский шаблон фабрики, могут не обнаруживаться и, следовательно, не обновляются.

Расположение извлеченного метода

Рефакторинг Extract Method теперь имеет опцию Place in, которая управляет тем, куда помещается извлеченная функция: рядом с текущей функцией, как свободная функция в пространстве имен, содержащем текущий класс, или как свободная функция в анонимном пространстве имен. Новая опция Make constexpr также позволяет пометить извлеченную функцию как constexpr.

Введение директивы using

Новый рефакторинг Introduce Using Directive заменяет квалификаторы пространства имен, такие как std в std::cout, на директиву using namespace.

Анализ строк форматирования

std::format, std::print и {fmt}

ReSharper C++ уже давно анализирует вызовы функций, похожих на printf. В версии 2026.3 этот анализ распространяется на заголовки стандартной библиотеки C++20 <format> и C++23 <print>, а также на популярную библиотеку {fmt}. Теперь ReSharper C++ анализирует вызовы format, format_to, format_to_n, formatted_size, print и println как из пространств имен std, так и fmt:

  • Поля подстановки в строке форматирования выделяются подсветкой. Когда курсор находится на поле подстановки, соответствующий аргумент также подсвечивается, и наоборот.
  • ReSharper C++ сообщает о недействительных полях подстановки, пропущенных и неиспользуемых аргументах, а также о строках форматирования, в которых смешивается автоматическая и ручная индексация аргументов.
  • Спецификация формата проверяется на соответствие типу аргумента. Например, форматирование double со спецификатором типа d помечается как ошибка, а быстрое исправление заменяет его на подходящее.
  • Именованные аргументы поддерживаются для библиотеки {fmt} через fmt::arg.

Обновления printf

Анализ функций, подобных printf, теперь поддерживает новые спецификаторы формата из C23. ReSharper C++ также понимает позиционные аргументы POSIX, такие как %1$s и %2$*1$d, и проверяет типы аргументов по позиции. Новая инспекция сообщает о вызовах printf, в которых смешиваются позиционные и непозиционные аргументы.

Макросы логирования Unreal Engine

Анализ строк форматирования теперь поддерживает UE_LOGFMT и связанные макросы структурного логирования Unreal Engine. ReSharper C++ подсвечивает поля в строке форматирования, сопоставляет их с аргументами и сообщает о пропущенных или неиспользуемых аргументах, а также о недействительных именах полей.

Атрибуты формата для конструкторов

Атрибуты [[jetbrains::format]] и [[gnu::format]] теперь можно применять к конструкторам, поэтому ReSharper C++ проверяет строку форматирования в вызовах конструкторов. Кроме того, ReSharper C++ теперь распознает вариант написания атрибута с подчеркиваниями — [[__gnu__::__format__(__printf__, 1, 2)]], а также константные выражения в индексах аргументов атрибута.

Анализ кода

Интеграция Clang-Tidy

Входящий в комплект бинарный файл Clang-Tidy был обновлен до LLVM 23, что принесло новые checks и улучшения из последнего релиза LLVM. Clang-Format также был обновлен.

Комментарии NOLINT с подстановочными знаками (глобами) в именах проверок, такие как // NOLINT(readability-*), теперь также подавляют инспекции ReSharper C++, соответствующие совпадающим проверкам Clang-Tidy. Более того, новая настройка Additional clang-tidy command-line arguments на странице параметров Clang-Tidy позволяет передавать дополнительные аргументы в Clang-Tidy.

Пояснения к невыполненным ограничениям

Когда выражение requires вычисляется как false, ReSharper C++ теперь показывает, какое именно требование не выполнено и почему его выражение некорректно. Например, функция или оператор могут быть недоступны или удалены, либо количество аргументов может не совпадать с кандидатами в функции. Аналогичным образом, сообщения об ошибках для удаленных конструкторов и неудачных проверок на возможность уничтожения теперь показывают всю цепочку причин вплоть до конкретного базового поля или класса, вызвавшего проблему.

CUDA

ReSharper C++ 2026.3 расширяет поддержку CUDA новым набором инспекций, которые можно настроить в новой группе CUDA на странице настроек степени серьезности инспекций:

  • Пространства выполнения: ReSharper C++ проверяет, что функцию можно вызывать из пространства выполнения CUDA вызывающего кода в соответствии с правилами Руководства по программированию CUDA. Проверка учитывает защитные блоки __CUDA_ARCH__, функции среды выполнения CUDA API, функции стандартной библиотеки C, доступные в коде устройства (такие как printf и malloc), а также вызовы перегруженных операторов.
  • Пространства памяти: Новые инспекции обнаруживают недопустимое использование спецификаторов __device__, __constant__, __shared__, __managed__ и __grid_constant__. Примеры включают спецификаторы пространства памяти для членов данных или параметров функций, инициализаторы для переменных __shared__, а также конфликтующие спецификаторы.
  • CUDA Tile: Новые инспекции обеспечивают соблюдение ограничений модели программирования CUDA Tile. Например, они сообщают об операторах goto и return внутри циклов в функциях __tile_global__, а также о ядрах tile, запускаемых с размером блока, отличным от 1. Подсказка также обнаруживает циклы, которые можно заменить циклом range-based for поверх cuda::tiles::irange.

Поддержка языковых стандартов

ReSharper C++ 2026.3 поддерживает больше возможностей из недавних стандартов C++:

  • Ограниченные управляющие последовательности C++23: \x{...}, \o{...} и \u{...} (P2290).
  • Пользовательские сообщения static_assert в C++26 (P2741).
  • Параметр смещения директивы #embed в C++26 (P3540).
  • Директивы #line перед объявлениями модулей в C++26 (P3868).

Интеграция с Visual Studio

Внепроцессный режим

В ReSharper 2026.2 внепроцессный режим (OOP) стал режимом по умолчанию. Он переносит тяжелые задачи анализа за пределы процесса Visual Studio, помогая предотвращать зависания интерфейса и обеспечивать плавность ввода. В этом выпуске мы продолжаем дорабатывать OOP-режим и исправляем оставшиеся проблемы:

  • Анализатор включений (Includes Analyzer) теперь доступен в OOP-режиме.
  • Сочетания клавиш F8 и Shift+F8 в Visual Studio используются для навигации по результатам поиска использований (Find Usages) от ReSharper.
  • Команда «Создать из шаблона» (New from Template) снова доступна в контекстном меню «Обозревателя решений» для проектов C++.

Модульное тестирование в проектах CMake

Проекты CMake, открытые в режиме «Открыть папку» (Open Folder) в Visual Studio, теперь собираются перед запуском модульных тестов в соответствии с настройкой политики сборки сеанса модульного тестирования.

Поделитесь своим мнением

В этом посте описаны основные улучшения поддержки C++. Ознакомьтесь со страницей What’s New in ReSharper 2026.3, чтобы узнать о всех остальных изменениях, представленных в этом выпуске. Помимо прочего, ReSharper 2026.3 добавляет в Visual Studio поддержку Claude и Codex наряду с Junie.

Загрузите последний выпуск и расскажите нам, как он работает для ваших проектов.

Узнать больше

← Все статьи

О чём эта статья

Ещё в разделе «Разработка ПО»

Все →
Передача KubeRay в CNCF
Anyscale

Передача KubeRay в CNCF

Агенты принятия решений CleverAI™: персонализация в режиме реального времени 1:1 для каждого взаимодействия с клиентом
Clevertap

Агенты принятия решений CleverAI™: персонализация в режиме реального времени 1:1 для каждого взаимодействия с клиентом

Каждая секунда на счету: Интеграция в здравоохранении
MuleSoft

Каждая секунда на счету: Интеграция в здравоохранении

Оригинальный контент в соцсетях: его сложнее найти, но брендам важно им овладеть
Sprout Social

Оригинальный контент в соцсетях: его сложнее найти, но брендам важно им овладеть

Как создать сайт для аренды жилья по шаблону: пошаговое руководство
Guesty

Как создать сайт для аренды жилья по шаблону: пошаговое руководство

Как синхронизировать календарь Airbnb с Vrbo и Booking.com
Guesty

Как синхронизировать календарь Airbnb с Vrbo и Booking.com

Ещё от JetBrains

ReSharper 2026.3: агенты Claude и Codex в Visual Studio, поддержка .NET 11 и C# 15 и многое другое
JetBrains

ReSharper 2026.3: агенты Claude и Codex в Visual Studio, поддержка .NET 11 и C# 15 и многое другое

Отладка сборок Unity из Rider с помощью TeamCity CLI и MCP
JetBrains

Отладка сборок Unity из Rider с помощью TeamCity CLI и MCP

Отладка в Rust в 2026 году
JetBrains

Отладка в Rust в 2026 году

Состояние экосистемы разработчиков 2026: Десять лет понимания разработчиков
JetBrains

Состояние экосистемы разработчиков 2026: Десять лет понимания разработчиков

Состояние Go в 2026 году: что изменилось в экосистеме Golang за последний год
JetBrains

Состояние Go в 2026 году: что изменилось в экосистеме Golang за последний год

Выпущена версия MPS 2026.2!
JetBrains

Выпущена версия MPS 2026.2!