Новые возможности для C++ в Visual Studio 2022

Visual Studio 2022 содержит множество обновлений и исправлений в компилятор и средства Microsoft C++. Visual Studio IDE также предлагает значительные улучшения производительности и продуктивности и теперь работает в виде собственного 64-разрядного приложения.

Новые возможности C++ в Visual Studio версии 17.9

Кратко, некоторые из новых функций:

  • #includeдиагностика, который предоставляет подробный анализ #include ваших директив. Активируйте эту функцию, щелкнув правой #include кнопкой мыши директивы #include, включите директиву>#include диагностика. Над каждым из них #include указано количество ссылок на код.#include Щелкните ссылку на ссылку, чтобы перейти к месту использования кода из этого файла заголовка. Чтобы просмотреть время #include сборки директив, запустите Аналитика сборки, перейдя к> Аналитика сборки сборки в сборке решения.>

    Screenshot of #include diagnostics

    Над #include является ссылка **reference** и ряд ссылок на этот файл # include (в данном случае 1). Время сборки также указано (в этом случае меньше 1/2 секунды).

  • Визуализация макета памяти, в которой показано, как организована память для классов, структур и профсоюзов. Наведите указатель мыши на тип и выберите ссылку "Макет памяти" в краткой информации , чтобы открыть выделенное окно, отображающее макет памяти выбранного типа. Наведите указатель мыши на отдельные типы данных в этом окне, предоставляя подробные сведения о их размере и смещение в типе.

    Screenshot of the memory layout window

    В окне макета памяти отображается содержимое класса Змеи. В нем показаны смещения памяти различных полей класса, таких как классы Point для расположения головы и тела, оценки и т. д.

  • Теперь можно указать собственный пользовательский исполняемый файл CMake. Эта функция полезна, если вы хотите использовать определенную версию CMake, которая не поставляется с Visual Studio. Перейдите к параметрам инструментов>и выберите "Общие" CMake.> Выберите "Включить настраиваемый исполняемый файл CMake" и укажите путь к каталогу исполняемого файла CMake.

    Screenshot of the CMake options dialog

    Диалоговое окно параметров CMake с параметром "Включить настраиваемый исполняемый файл CMake" и выделенным полем "CMake Исполняемый каталог".

  • Улучшена технология IntelliSense для проектов Unreal Engine.
  • Улучшена поддержка C++23: std::format иformattablestd::span , format_kindrange_formatа set_debug_format() также как часть P2286R8 диапазонов<mdspan> форматирования на P0009R18 и последующие изменения в формулировках, примененные к стандарту C++23. Кроме того, format() можно форматировать указатели на P2510R3.

Сводка по обновлениям серверной части C++ см. в разделе обновления серверной части MSVC с visual Studio 2022 версии 17.3.

Сводка по новым функциям в интегрированной среде разработки Visual Studio 17.9 см . в заметках о выпуске Visual Studio 2022 версии 17.9.

Новые возможности C++ в Visual Studio версии 17.8

Кратко, некоторые из новых функций:

  • Структурированные диагностика C++ в окне вывода и новое окно сведений о проблеме, которое содержит дополнительные сведения об ошибке. Дополнительные сведения см. в разделе "Структурированные выходные данные SARIF" и "Сведения о проблеме".
  • Функция, которая позволяет визуализировать размер и выравнивание классов, структур, профсоюзов, базовых типов или перечислений даже до компиляции кода. Наведите указатель мыши на идентификатор и краткие сведения о размере и выравнивании.
  • Функция, предполагающая, когда следует пометить функции-члены const , так как они не изменяют состояние объекта. Наведите указатель мыши на функцию-член и щелкните значок лампочки, чтобы пометить функцию как const.
  • Visual Studio теперь предложит пометить глобальные функции как статические с помощью значка отвертки, отображаемого именем функции. Щелкните значок отвертки, чтобы пометить функцию как статическую.
  • Неиспользуемые директивы #include не используются в редакторе. Вы можете навести указатель мыши на неактивное включение и использовать меню лампочки, чтобы удалить их или все неиспользуемые. Вы также можете добавить #include директивы для сущностей, которые косвенно включены через другие заголовки. Дополнительные сведения см. в разделе "Очистка C/C++ в Visual Studio".
  • Дополнительная поддержка Unreal Engine:
    • Адаптер тестирования Unreal Engine позволяет обнаруживать, запускать, администрировать и отлаживать тесты Unreal Engine без выхода из интегрированной среды разработки Visual Studio.
    • С помощью фрагментов кода Unreal Engine вы можете найти распространенные конструкции Unreal Engine в виде фрагментов в списке участников.
    • Сборка Аналитика теперь интегрирована с Visual Studio 2022 и работает с проектами MSBuild и CMake с помощью MSVC. Теперь можно просмотреть дополнительные сведения о компиляции функции, например о том, сколько времени потребовалось для компиляции и количества ForceInlines.
  • Поддержка удаленного модульного теста Linux теперь позволяет запускать тесты CTest и GTest на удаленных компьютерах Linux с Обозреватель тестирования Visual Studio, как и локальные тесты.

Подробные сведения о новых функциях C++ в Visual Studio 17.8 см. в статье "Новые возможности для разработчиков C++ в Visual Studio 2022 17.8".

Сводка по новым функциям в интегрированной среде разработки Visual Studio 17.8 см. в заметках о выпуске Visual Studio 2022 версии 17.8.

Новые возможности C++ в Visual Studio версии 17.7

Сводка по новым функциям C++ в Visual Studio 17.7 см. в статье "Новые возможности для разработчиков C++ в Visual Studio 2022 17.7".

Кратко, некоторые из новых функций:

  • Ускорить отладку сеансов и ускорить загрузку проекта
  • Пошаговая визуализация расширения макроса
  • Скачать один щелчком мыши для подсистема Windows для Linux (WSL)
  • Улучшенная поддержка комментариев Doxygen
  • Аналитика сборки C++ для разработки игр
  • /std:clatest Добавлен для компилятора C.
  • Улучшения проекта Unreal Engine, такие как более быстрая цветовая кодировка IntelliSense и синтаксис, возможность найти все ссылки на схему Unreal Engine и многое другое.

Сводка по новым функциям C++, которые относятся к разработке игр, см. в статье "Развязывание возможностей Visual Studio 2022 для разработки игр на C++"

Сводка по новым функциям в интегрированной среде разработки Visual Studio 17.7 см . в заметках о выпуске Visual Studio 2022 версии 17.7.

Новые возможности C++ в Visual Studio версии 17.6

Сводка по новым функциям C++ в Visual Studio 17.6 см. в статье "Новые возможности для разработчиков C++ в Visual Studio 2022 17.6".

Кратко говоря, некоторые из новых функций: отладка скрипта CMake, встроенная поддержка языка заливки высокого уровня (HLSL), средства просмотра журнала Unreal Engine, начальная поддержка C++20 в проектах C++/CLI, VCPKG теперь добавляется по умолчанию, а некоторые функции стандартной библиотеки C++23 для диапазонов. Полный список новых функций, добавленных в стандартную библиотеку, см. в журнале изменений STL.

Сводка по новым функциям в интегрированной среде разработки Visual Studio 17.6 см. в заметках о выпуске Visual Studio 2022 версии 17.6.

Новые возможности C++ в Visual Studio версии 17.5

Сводка по новым функциям C++ в Visual Studio версии 17.5 см. в статье "Новые возможности для разработчиков C++ в Visual Studio 2022 17.5". Сводка по новым функциям и исправлениям ошибок в интегрированной среде разработки Visual Studio версии 17.5 см . в заметках о выпуске Visual Studio 2022 версии 17.5.

  • std::move, , std::forwardstd::move_if_noexceptи std::forward_like теперь не создают вызовы функций в созданном коде даже в режиме отладки. Это изменение позволяет избежать именованных приведения, вызывающих ненужные затраты в сборках отладки. /permissive- (или вариант, который подразумевает его, например /std:c++20 или std:c++latest) является обязательным.

  • Добавлено [[msvc::intrinsic]] для поддержки приведенного выше элемента. Этот атрибут можно применить к нерекурсивным функциям, состоящим из одного приведения, который принимает только один параметр.

  • Добавлена поддержка консоли Linux в интегрированном терминале, которая позволяет выполнять ввод-вывод терминала.

  • Добавлена начальная экспериментальная поддержка атомарных примитивов C11 (<stdatomic.h>). Эту экспериментальную функцию можно включить с параметром /experimental:c11atomics в /std:c11 режиме или более поздней версии.

  • Добавлен новый набор экспериментальных высокоуверенных проверка в средство проверки времени существования для снижения шума.

  • Новая функция предварительной версии, удаленная проводник, позволяет просматривать каталог файлов на удаленных компьютерах в VS, а также отправлять и скачивать в него файлы.

  • Изменено управление версиями исполняемых файлов CMake, поставляемых с Visual Studio для сопоставления версий Kitware.

  • Добавлена поддержка Горячая перезагрузка в шаблон проекта CMake.

  • Перейти к определению для C++ теперь использует более тонкий индикатор операции, который занимает больше времени, заменив модальное диалоговое окно из предыдущих версий.

  • Начало развертывания эксперимента, предоставляющего более умные результаты в списке автозавершения и члена C++. Эта функция ранее была известна как Predictive IntelliSense, но теперь использует новый метод презентации.

  • Теперь мы отправим собственный набор инструментов Arm64 Clang с помощью рабочей нагрузки LLVM, что позволяет выполнять собственную компиляцию на компьютерах Arm64.

  • Добавлена локализация в расширение "Просмотр изображений" (это расширение доступно в Marketplace и не входит в пакет с помощью установщика Visual Studio).

  • Добавлена поддержка открытия окна терминала в текущий запущенный контейнер разработчика.

  • Улучшено расширение макросов IntelliSense. В частности, мы включили рекурсивное расширение в дополнительных контекстах, и мы добавили параметры во всплывающем окне, чтобы скопировать расширение в буфер обмена или развернуть макрос в виде встроенного.

  • Теперь в последовательном мониторе поддерживается одновременный мониторинг. Одновременный мониторинг позволяет отслеживать несколько портов одновременно параллельно. Нажмите кнопку "плюс", чтобы открыть другой последовательный монитор и начать работу.

  • Теперь можно просматривать свойства из базовых классов, измененных в ресурсе Unreal Blueprint, не выходя из Visual Studio. Дважды щелкните ссылку на схему для класса или свойства C++, чтобы открыть инспектор активов UE в Visual Studio.

  • Включен запуск DevContainers на удаленном компьютере Linux.

  • Включен выбор нескольких целевых объектов для сборки в представлении целевых объектов CMake.

  • Добавлена поддержка CMakePresets.json версии 5. Дополнительные сведения о новых функциях см. в документации по CMake.

  • Включена Обозреватель тестирования для параллельного создания и тестирования нескольких целевых объектов CMake.

  • Добавлен параметр "Открыть контейнер в терминале" в контейнеры разработки.

  • Реализованы стандартные функции библиотеки:

    • basic_format_stringP2508R1, format_stringwformat_string
    • ranges::fold_leftP2322R6, ranges::fold_rightи т. д.
    • views::zip P2321R2 (не включает zip_transform, adjacentи adjacent_transform)

Новые возможности C++ в Visual Studio версии 17.4

Сводка по новым функциям и исправлениям ошибок в Visual Studio версии 17.4 см. в заметках о выпуске Visual Studio 2022 версии 17.4 и новых возможностях разработчиков C++ в Visual Studio 2022 17.4.

  • Улучшены сообщения об ошибках компилятора, чтобы обеспечить более правильную и полезную информацию, особенно для концепций.

  • Добавлен экспериментальный параметр /experimental:log<directory> MSVC для вывода структурированных диагностика SARIF в указанный каталог.

  • Добавлена поддержка атрибутов C23 в IntelliSense и продолжалась поддержка модулей C++20.

  • Улучшена производительность индексирования при открытии нового решения. Крупные проекты могли видеть улучшение на 20-35% с 17,3.

  • Улучшена оптимизация именованных возвращаемых значений (NRVO):

    • NRVO включен для случаев обработки исключений или циклов.
    • NRVO включен даже /Od в том случае, если пользователь передает /Zc:nrvo параметр или /std:c++20 более поздней версии или /permissive-.
    • Теперь можно отключить NRVO с параметром /Zc:nrvo- .
  • Обновлена версия LLVM, поставляемая с Visual Studio до 15.0.1. Дополнительные сведения о доступных функциях см. в заметках о выпуске LLVM и Clang .

  • Добавлена поддержка артефактов Visual Studio для артефактов vcpkg с проектами CMake. Для проектов, включающих манифест vcpkg, среда активируется автоматически при открытии проекта. Узнайте больше об этой функции в активации среды vcpkg в записи блога Visual Studio .

  • Теперь вы можете использовать контейнеры разработки для проектов C++. Дополнительные сведения об этой функции см. в записи блога "Контейнеры разработки для C++ ".

  • IntelliSense теперь учитывает порядок предварительно включаемых заголовков, когда один из них является PCH. Ранее, когда PCH использовался через /Yu и принудительно включен /FIчерез , IntelliSense всегда будет обрабатывать его сначала, прежде чем любые другие заголовки включены через /FI. Это поведение не соответствовало поведению сборки. При этом изменении /FI заголовки обрабатываются в указанном порядке.

  • Удалены внутренние префиксы из имен CTest в test Обозреватель.

  • Обновлена версия CMake, поставляемая с Visual Studio, до версии 3.24.1. Дополнительные сведения о доступных выпусках см. в заметках о выпуске CMake.

  • Обновление пакета SDK для Android:

    • Скрипты Ant были удалены, поэтому пользователи больше не видят шаблонов на основе муравей в диалоговом окне "Новый проект". Справку по миграции из шаблонов Ant в шаблоны Gradle см. в разделе "Миграция сборок из Apache Ant"
    • Добавлена поддержка сборки с помощью NDK 23 и 24
    • Обновлен компонент NDK до LTS версии 23
  • Добавлены векторные реализации ranges::min_element(), ranges::max_element()и ranges::minmax_element()

  • Мы продолжаем отслеживать последние разработки в стандартизации C++. Поддержка этих функций C++23 доступна, в том числе /std:c++latest в параметрах компилятора:

    • ranges::containsP2302R4,ranges::contains_subrange

    • string_view Конструктор диапазона P2499R0 должен бытьexplicit

    • auto(x)P0849R8: разложение копирования на языке

      (Часть компилятора еще не реализована. Часть библиотеки была реализована в режиме C++20 при первоначальной реализации поддержки Ranges.)

    • P0881R7<stacktrace>

    • P2301R1 добавление псевдонима pmr дляstd::stacktrace

    • P1328R1constexpr type_info::operator==()

    • ranges::iotaP2440R1, ranges::shift_left,ranges::shift_right

    • P2441R2views::join_with

  • Добавлен параметр "Навигация после создания объявления или определения", позволяющий выбрать поведение навигации функции "Создать объявление или определение". Вы можете выбрать между просмотром (по умолчанию) или открытием документа или без навигации.

  • Сборки Arm64 Visual Studio теперь объединяют версии Arm64 CMake и Ninja.

  • Добавлена поддержка предустановок CMake версии 4. Дополнительные сведения о доступных выпусках см. в заметках о выпуске CMake.

  • Удаленные системные подключения с помощью диспетчер подключений теперь поддерживают SSH ProxyJump. ProxyJump используется для доступа к узлу SSH через другой узел SSH (например, для доступа к узлу за брандмауэром).

Новые возможности C++ в Visual Studio версии 17.3

Сводка по новым функциям и исправлениям ошибок в Visual Studio в версии 17.3 см. в разделе о улучшениях выпуска Visual Studio 2022 версии 17.3 и C++ .

  • Цепочка инструментов Arm64EC больше не помечена как экспериментальная и готова к использованию в рабочей среде.

  • Теперь терминал Visual Studio можно использовать в качестве клиента SSH с сохраненными подключениями SSH. Установив средства C++ для Linux, откройте окно средства терминала. Раскрывающийся список терминала заполняется сохраненными подключениями. При выборе подключения откроется новое окно терминала в Visual Studio, где отображается псевдо-терминал в удаленной системе. Все элементы управления символами, цветами и осведомленностью о позиции курсора поддерживаются.

  • Visual Studio теперь может добавлять шаблоны классов Unreal Engine для проектов UE. Чтобы попробовать эту функцию, убедитесь, что поддержка интегрированной среды разработки Unreal Engine выбрана в рабочей нагрузке "Игра" с помощью рабочей нагрузки C++ в установщике Visual Studio. При работе с проектом UE щелкните правой кнопкой мыши проект или папку или фильтр и выберите "Добавить>класс UE".

  • Перейти к определению теперь запоминает предыдущий сигнатуры и перемещается соответствующим образом, если лучшее совпадение недоступно (например, после изменения подписи одной из пар вручную). Улучшена скорость реагирования go To All . Ранее результаты появились после остановки ввода. В новом интерфейсе результаты отображаются при вводе.

  • В контекстах, требующих enum завершения типа (например, назначения enum переменных, меток регистра, возвращаемого enum типа и т. д.), список автозаполнения теперь фильтруется только для соответствующих перечислителей и связанных конструкций.

  • Добавлена поддержка NuGet PackageReference для проектов C++/CLI MSBuild, предназначенных для .NET Core. Это изменение было внесено для разблокировки смешанных баз кода от возможности внедрения .NET Core. Эта поддержка не работает для других типов проектов C++ или любых типов проектов C++, предназначенных для платформа .NET Framework. Нет планов расширить поддержку PackageReference в других сценариях C++. Команда работает над отдельными возможностями, связанными с vcpkg для сценариев, отличных от MSBuild, и для добавления дополнительных функциональных возможностей.

  • Добавлено окно последовательного монитора для встроенной разработки, доступное с помощью последовательного>монитора Windows.>

  • Улучшено индексирование C++ на ~66% по сравнению с 17,2.

  • Обновлена версия CMake, поставляемая с Visual Studio, до версии 3.23. Дополнительные сведения о доступных доступных заметках о выпуске CMake 3.23 см. в заметках о выпуске CMake 3.23.

  • Обновлены версии средств LLVM, поставляемых с Visual Studio до версии 14. Дополнительные сведения о доступных сведениях см. в заметках о выпуске LLVM и Clang .

  • Обновлен набор инструментов C++ параллельно с dev 16.11 до версии 14.29.30145.00. Последняя версия набора инструментов C++ dev 16.11 содержит важные исправления ошибок, включая исправление всех оставшихся отчетов о дефектах C++20. Дополнительные сведения о исправлениях ошибок, включая отчеты о дефектах C++20 в dev 16.11, см . в заметках о выпуске Visual Studio 2019 версии 16.11.14.

  • Внесены различные улучшения в интерфейсе редактора модулей C++ . Мы постоянно работаем над улучшением качества опыта, но рекомендуем вам попробовать их в 17.3. Сообщите о оставшихся проблемах с помощью Сообщество разработчиков.

Новые возможности C++ в Visual Studio версии 17.2

Сводка по новым функциям и исправлениям ошибок в Visual Studio в версии 17.2 см . в заметках о выпуске Visual Studio 2022 версии 17.1.

  • Добавлена поддержка компилятора функции C++23 для вывода this, которая доступна под флагом /std:c++latest.

  • Добавлена поддержка IntelliSense для функций C++23 для вывода this и if consteval.

  • Добавлена поддержка подсказок имени и типа встроенного параметра, переключаемая с помощью клавиш ALT+F1 или двойного нажатия клавиши CTRL. Это поведение можно настроить в разделе Tools, Options, Text Editors, C/C++, IntelliSense (Инструменты, Параметры, Текстовые редакторы, C/C++, IntelliSense).

  • Добавлена экспериментальная поддержка модулей C++20 в проектах CMake. Сейчас эта поддержка доступна только для генератора Visual Studio (MSBuild).

  • В версии 17.1 впервые появились представления периферийных регистров и ОСРВ для разработчиков встроенных платформ. Мы продолжаем совершенствовать эти представления и в версии 17.2 внесли ряд улучшений для удобства использования.

    • Окно инструментов ОСРВ теперь по умолчанию скрыто. Это предотвращает появление окна инструментов с сообщениями об ошибках, которые не актуальны без использования ОСРВ.
    • При двойном щелчке объекта ОСРВ в окне инструмента он добавляет часы для объекта.
    • При выборе начальных и конечных значений указателя стека в окне инструментов ОСРВ откроется в окне памяти.
    • Добавлена осведомленность о потоках для целевых объектов устройств в окне стека вызовов.
    • Теперь пользователи могут щелкнуть значок для закрепления регистров, периферийных регистров или полей вверху соответствующего представления.
  • Добавлены реализации оставшихся отчетов о дефектах C++20 (также известных как backports). В параметре /std:c++20 теперь доступны все функции C++20. Дополнительные сведения о реализованных бэкпортах см. в проекте отчетов о дефектах C++20 в репозитории GitHub Microsoft/STL и в записи блога Завершение MSVC STL/std:c++20.

  • Добавлены несколько возможностей библиотеки C++23, которые открывает флаг /std:c++latest. Дополнительные сведения о новых возможностях см. в журнале изменений репозитория STL.

  • Улучшена производительность начального индексирования C++ на 20 %, в зависимости от глубины графа включения.

Новые возможности C++ в Visual Studio версии 17.1

Сводка по новым функциям и исправлениям ошибок в Visual Studio в версии 17.1 см. в заметках о выпуске Visual Studio 2022 версии 17.1.

  • Добавлен новый шаблон настройки предустановки для настройки и сборки проектов CMake в удаленной системе macOS с CMakePresets.jsonпомощью . Можно также запустить целевые объекты CMake на удаленной системе macOS, а затем выполнить удаленную отладку в отладчике Visual Studio с подключением GDB или LLDB.
  • Теперь можно выполнить отладку дампов ядра на удаленной системе macOS из Visual Studio с помощью LLDB или GDB.
  • Версии Clang и LLVM поставки в Visual Studio обновляются до версии 13.
  • Интеграция Visual Studio с CMake активна, только когда CMakeLists.txt определяется в корне открытой рабочей области. Если объект CMakeLists.txt определен на другом уровне рабочей области, вам будет предложено активировать интеграцию CMake Visual Studio с уведомлением.
  • Новые представления, позволяющие проверять и взаимодействовать с периферийными регистрами в микроконтроллерах и объектах операционных систем реального времени (ОСРВ), доступных с помощью отладки>регистров Windows Embedded>
  • Добавлено новое представление цепочек для проектов ОСРВ, доступное в меню Отладка>Окна>Объекты ОСРВ. Дополнительные сведения см. в статье Embedded Software Development in Visual Studio.

Новые возможности C++ в Visual Studio версии 17.0

Сводка по новым функциям и исправлениям ошибок в Visual Studio см. в заметках о выпуске Visual Studio 2022 версии 17.0.

  • Visual Studio IDE, devenv.exe, теперь является собственным 64-разрядным приложением.

  • Набор инструментов MSVC теперь по умолчанию используется для хэширования источника SHA-256 в отладочных записях. Ранее набор инструментов использовал MD5 для хэширования источника по умолчанию.

  • Средства сборки версии 143 теперь доступны благодаря установщику Visual Studio, а также в автономных средствах сборки.

Горячая перезагрузка для машинного кода C++

  • Горячая перезагрузка для C++ позволяет вносить в выполняемое приложение изменения кода разных типов и применять их без необходимости приостанавливать его с помощью точки останова или аналогичного средства.

В Visual Studio 2022 при запуске приложения в отладчике можно использовать кнопку горячей перезагрузки для внесения изменений во время выполнения приложения. Этот интерфейс работает на основе собственного режима "Изменить и продолжить". Дополнительные сведения о поддерживаемых изменениях см. по ссылке Изменить и продолжить (C++).

  • Горячая перезагрузка теперь поддерживает проекты CMake и OpenFolder.

Поддержка WSL2

  • Теперь вы можете выполнять сборку и отладку собственного кода в WSL2 без установления SSH-подключения. Поддерживаются кросс-платформенные проекты CMake и проекты Linux на основе MSBuild.

Улучшенная поддержка CMake

  • Обновлена версия CMake, поставляемая с Visual Studio до версии 3.21. Дополнительные сведения о доступных функциях этой версии см. в заметках о выпуске CMake 3.21.

  • Страницы обзора CMake обновляются для поддержки CMakePresets.json.

  • Теперь вы можете настраивать проекты CMake и выполнять их сборку с помощью CMake 3.21 и CMakePresets.json версии 3.

  • Visual Studio теперь поддерживает параметр buildPresets.targets в CMakePresets.json. Он позволяет создать набор целевых объектов в проекте CMake.

  • Меню "Проект" в проектах CMake упрощается и предоставляет параметры "Удалить кэш и перенастройку" и "Просмотреть кэш".

  • Реализован параметр компилятора /scanDependencies для перечисления зависимостей модуля C++20 для проектов CMake, как описано в P1689R5. Это шаг к поддержке создания проектов на основе модулей с помощью CMake, и мы работаем над реализацией этой поддержки в последующих выпусках.

Улучшения стандартной библиотеки

Здесь выделены улучшения стандартной библиотеки (STL). Полный список новых функций, изменений, исправлений ошибок и улучшений производительности см. в журнале изменений команды STL.

  • Добавлены визуализаторы отладки для улучшения отображения следующих типов: source_location, bind_front(), u8string (и его итераторы), default_sentinel_t, unreachable_sentinel_t, ranges::empty_view, ranges::single_view, ranges::iota_view (и его итератор или граничная метка), ranges::ref_view, thread, thread::id, jthread и filesystem::path.
  • Добавлен [[nodiscard]] в семейство функций stoi() в <string> и в различные функции в <locale>, такие как функции-члены collate, has_facet() и семейства isalnum() и tolower().
  • P0980R1 Создан std::stringconstexpr в VS 2019 версии 16.10. Теперь поддерживается для Clang.
  • P1004R2 Создан std::vectorconstexpr в VS 2019 версии 16.10. Теперь поддерживается для Clang.

Выделенные функции C++23

  • P1048R1 Добавлен is_scoped_enum, новый признак для стандартной библиотеки C++, который определяет, является ли тип ограниченным перечислением.
  • P1132R7out_ptr(), inout_ptr()
  • P1679R3contains() для basic_string и basic_string_view
  • P1682R3to_underlying() для перечислений
  • P2162R2 Разрешено наследование от std::variant.
  • P2166R1 Запрещено создание basic_string и basic_string_view из nullptr. Это критическое изменение исходного кода. Код с ранее неопределенным поведением в среде выполнения теперь отклоняется с ошибками компилятора.
  • P2186R2 Удалена поддержка сборки мусора. Это изменение удаляет declare_reachable, undeclare_reachable, declare_no_pointers, undeclare_no_pointers, get_pointer_safety. Ранее эти функции не действовали.

Выделенные улучшения производительности

  • <format> теперь определяет, когда идет запись в back_insert_iterator для basic_string или vector, и быстрее вызывает insert() в end() контейнера.
  • Улучшена производительность std::find() и std::count() для vector<bool> в 19 и 26 раз (не на соответствующее число процентов).
  • Улучшена производительность std::count() для vector<bool>.
  • Производительность std::byte теперь такая же, как у unsigned char в reverse() и variant::swap().

Поддержка Clang и LLVM

  • Средства LLVM, предоставляемые Visual Studio, обновляются до LLVM 12. Дополнительные сведения см. в заметках о выпуске LLVM.

  • Поддержка Clang-cl была обновлена до LLVM 12.

  • Теперь вы можете выполнять отладку процессов, работающих на удаленных системах из Visual Studio, с помощью LLDB.

C++ AMP не рекомендуется

  • Заголовки C++ AMP теперь являются нерекомендуемыми. Включение <amp.h> в проект C++ приводит к возникновению ошибок сборки. Чтобы заглушить эти ошибки, определите _SILENCE_AMP_DEPRECATION_WARNINGS. Дополнительные сведения см. по ссылкам об объявлении AMP нерекомендуемым.

Улучшения IntelliSense

  • Внесены улучшения в IntelliSense для C++, касающиеся навигации и выделения синтаксиса в типах из импортированных модулей и блоков заголовков. IntelliSense — это активная область вложений для нас. Помогите нам стать лучше: поделитесь своим отзывом в сообществе разработчиков, перейдя в меню Справка>Отправить отзыв.

  • Улучшена производительность IntelliSense для C++ за счет оптимизации использования кэшированных заголовков и доступа к базе данных символов, что позволило уменьшить время загрузки для перехода к коду.

  • Анализатор кода IntelliSense для C++ теперь включен по умолчанию. Он выдает мгновенные предложения во время ввода, а также предложения по исправлению для распространенных ошибок в коде.

  • C++ IntelliSense для проектов CMake теперь работает при использовании заготовки с отображаемым именем.

Обновления рабочей нагрузки C++

  • В рабочей нагрузке Разработка мобильных приложений на языке C++ произведено обновление до пакета NDK r21 LTS.

  • Разработка игр с помощью рабочей нагрузки C++ теперь устанавливает последнюю версию Unreal Engine с поддержкой Visual Studio 2022.

Улучшения анализа кода

  • Анализ кода теперь обеспечивает принудительную проверку возвращаемых значений функций с аннотациями _Check_return_ или _Must_inspect_result_.

  • Обнаружение разыменовки указателя NULL улучшено в нашем средстве анализа кода.

  • Добавлена поддержка gsl::not_null для анализа кода.

  • Поддержка libFuzzer с параметром компилятора /fsanitize=fuzzer.

Заметки о выпусках более ранних версий

Также доступны заметки о выпусках более ранних версий C++. Сведения о новых возможностях C++ в Visual Studio 2019 см. в статье Новые возможности C++ в Visual Studio 2019. Сведения о новых возможностях C++ в Visual Studio 2017 см. в статье Новые возможности C++ в Visual Studio 2017. Сведения о новых возможностях в более ранних версиях см. в статье Новые возможности Visual C++ в версиях с 2003 по 2015.

Известные проблемы

C++ IntelliSense

Дополнительные сведения о других открытых проблемах и доступных решениях для C++ в Visual Studio 2022 см. в списке проблем для сообщества разработчиков C++.

Отзывы и предложения

Мы хотели бы услышать ваше мнение! Вы можете сообщить о проблеме или предложить функцию с помощью значка "Отправить отзыв" в правом верхнем углу установщика или Visual Studio IDE или в меню Справка>Отправить отзыв. Вы можете отслеживать проблемы в сообществе разработчиков Visual Studio, позволяющем добавлять комментарии или искать решения. Кроме того, вам доступна бесплатная поддержка в чате по вопросам с установкой.

Блоги

Воспользуйтесь преимуществами аналитических сведений и рекомендаций, доступных на сайте блогов разработчиков Майкрософт, чтобы оставаться в курсе всех новых выпусков . В блогах можно найти записи, подробно изучающие разнообразные функции. Блог команды C++ и блог Visual Studio имеют особый интерес.