Поделиться через


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

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

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

Выпущено в ноябре 2024 г.

Дополнительные сведения Смотрите
Новые возможности для разработчиков C++ Новые возможности для разработчиков C++ в Visual Studio 2022 17.12
Стандартная библиотека (STL) объединяет функции C++26 и C++23, разрешения проблем LWG, улучшения производительности, улучшенное поведение и исправленные ошибки Журнал изменений STL 17.12
Новые возможности интегрированной среды разработки Visual Studio 17.12 Заметки о выпуске Visual Studio 2022 версии 17.12
Улучшения соответствия языка C++ в Visual Studio 2022 17.12 Улучшения соответствия C++, изменения поведения и исправления ошибок в Visual Studio 2022 17.12

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

  • Улучшения стандартной библиотеки
    • Реализация диапазонов форматирования (P2286R8) C++23 завершена. Добавлены модули форматирования для адаптеров stackконтейнеров и queuepriority_queue.
    • Добавлены многомерные операторы подстрочного, которые также поддерживают <mdspan>. Например: print("m[{}, {}]: '{}'; ", i, j, m[i, j]).
  • Разработка игр в C++
  • Аналитика сборки
    • Вы можете запустить Build Insights для выбранных файлов. Выберите нужные файлы в Обозреватель решений, щелкните правой кнопкой мыши и выберите команду "Запустить аналитику сборки" для выбранных файлов:Снимок экрана: файлы в Обозреватель решений. Контекстное меню открыто, и выделен параметр run Build Insights on Selected Files.
    • Результаты Build Insights можно фильтровать по проекту. Нажмите кнопку фильтра в заголовке столбца фильтра и выберите проекты, для которого нужно просмотреть результаты: Снимок экрана: окно
    • Щелкните значок вопросительного знака в окне "Аналитика сборки", чтобы просмотреть краткое описание вкладок в окне "Аналитика сборки" и ссылку на документацию для подробного объяснения: Снимок экрана: окно
  • GitHub Copilot
    • Вы можете щелкнуть Ask Copilot рядом со значением переменной, чтобы получить аналитические сведения, управляемые искусственным интеллектом, в том, что привело к текущему состоянию. Например, следующая программа имеет ошибку вне одного цикла в состоянии цикла:

    Снимок экрана: окно

    Код, который вызвал эту проблему: for (auto it = h.animals_.begin(); он <= h.animals_.end(); it++.

    Если щелкнуть значок Ask Copilot для переменной it , вы узнаете, почему это <NULL>:

    Снимок экрана: окно GitHub Copilot.

    Эта ошибка находится внутри функции, определенной как int calculate_number_of_cats(const house&h). Сообщение GitHub Copilot говорит: "Значение выражения null, что означает, что итератор не указывает на любой допустимый элемент в векторе animals_. В контексте программы предполагается перебор animals_ вектора в объекте дома для подсчета количества объектов кота. Почему значение null. На основе локальных и контекста стека вызовов: объект дома имеет пустой вектор animals_ (size=0). Условие цикла <= h.animals_.end() неверно. Это должно быть != h.animals_.end()."

    • Чтобы получить справку об ошибке и предложенном исправлении, щелкните "Попросить Copilot" в списке ошибок Visual Studio. Например:

    Снимок экрана: окно списка ошибок.

    Значок Ask Copilot выделен рядом с ошибкой, которая unique_ptr пытается ссылаться на удаленную функцию.

    Если щелкнуть Ask Copilot, он сообщает об ошибке:

    Снимок экрана: объяснение ошибки в GitHub Copilot.

    Сообщение Copilot говорит: "Ошибка возникает из-за попытки копирования объектов std::unique_ptr, так как std::unique_ptr не может быть скопировано. Чтобы устранить эту проблему, я изменил цикл, чтобы использовать ссылку, чтобы избежать копирования объектов std::unique_ptr. Таким образом, цикл выполняет итерацию ссылок на объекты std::unique_ptr, что допускается".

  • Отладка
    • Новые визуализаторы отладки для mutex, recursive_mutexи move_iterator.
    • Теперь отладчик отображает встроенные возвращаемые значения: Снимок экрана: подсказка со значением 8.25. Это результат выражения после инструкции return, которая была перешагнулась.

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

Выпущено за август 2024 г.

Дополнительные сведения Смотрите
Новые возможности для разработчиков C++ Новые возможности для разработчиков C++ в Visual Studio 2022 17.11
Стандартные функции библиотеки (STL), объединенные функции C++26 и C++23, отчеты о дефектах C++20, разрешения проблем LWG, улучшения производительности, улучшенное поведение и исправленные ошибки Журнал изменений STL 17.11
Новые возможности интегрированной среды разработки Visual Studio 17.11 Заметки о выпуске Visual Studio 2022 версии 17.11
Улучшения соответствия языка C++ в Visual Studio 2022 17.11 Улучшения соответствия C++, изменения поведения и исправления ошибок в Visual Studio 2022 17.11

Частичный список новых функций:

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

    • Форматированная реализация выходных данных теперь включает std::range_formatter и форматирует std::pair для и std::tuple.
    • Добавлена поддержка std::println() без аргументов. Это печатает пустую строку, как предлагается в P3142R0.
    • Улучшенная векторизация для нескольких алгоритмов, включая replace_copy(), replace_copy_if(), find_first_of() ranges::replace_copy_ifranges::replace_copyи ranges::find_first_of, для 8-разрядных и 16-разрядных элементов, mismatch(), find()count() ranges::iotaranges::mismatchranges::countranges::findranges::find_lastи .
  • Разработка игр в C++

    • Теперь вы можете добавить общие шаблоны классов Unreal Engine, модули и подключаемые модули из Visual Studio. Дополнительные сведения см. в разделе "Добавление классов, модулей и подключаемых модулей Unreal Engine" в Visual Studio.
    • Новая панель инструментов Unreal Engine обеспечивает быстрый доступ к связанным действиям Unreal Engine из Visual Studio. Панель инструментов позволяет быстро подключиться к процессам Unreal Engine, повторно сканировать кэш схемы, быстро получить доступ к журналу Unreal Engine и быстро получить доступ к странице конфигурации Unreal Engine для Visual Studio. Дополнительные сведения см. на панели инструментов Unreal Engine.
    • Теперь можно фильтровать результаты трассировки по проекту. Кроме того, в каждой строке отображаются относительный путь и имя файла, а не полный путь. Группирование результатов в представлении включенных файлов также улучшается:

    Снимок экрана: улучшенные результаты диагностика включенных файлов.

    В представлении включенных файлов есть новый столбец для проекта. Выбран столбец Project, например (Select All), CompilerIdC, OpenAL, common и т. д. Включенные файлы перечислены по относительному пути и имени файла и группируются вместе.

  • Отладка CMake

    • Теперь вы можете выполнить отладку скриптов и CMakeLists.txt файлов CMake в отладчике Visual Studio для проектов CMake, предназначенных для Linux с помощью подсистема Windows для Linux (WSL) или SSH. Чтобы запустить сеанс отладки CMake в Visual Studio, установите точку останова в CMakeLists.txt файле и перейдите в раздел "Настройка кэша проекта>" с помощью отладки CMake.
  • GitHub Copilot

    • При наведении указателя мыши на символы в редакторе кода нажмите кнопку "Рассказать мне больше " в диалоговом окне "Краткие сведения", чтобы узнать больше о заданном символе:

    Снимок экрана: окно

    Окно "Быстрая информация" отображается над функцией. Выделена ссылка "Сообщить мне больше".

    • GitHub Copilot может создавать предложения именования для идентификаторов (переменных, методов или классов) на основе использования идентификатора и стиля кода.

      Снимок экрана: диалоговое окно переименования GitHub Copilot.

      В диалоговом окне "Переименование" есть поле "Новое имя" со раскрывающимся списком, где показаны следующие варианты: text_color, font_color, display_color, console_color и menu_text_color.

    Вам нужна активная подписка на GitHub Copilot. Щелкните правой кнопкой мыши переменную, которую вы хотите переименовать, и выберите " Переименовать " (Ctrl+R, Ctrl+R). Щелкните значок GitHub Copilot sparkle, чтобы создать предложения именования.

  • Отладка

    • Условные точки останова в C++ быстрее.
  • Улучшения диагностики

    • Улучшено диагностика при вызове std::get<T> std::tuple с несколькими экземплярами T в его аргументах шаблона. MSVC, используемый для отчета:
      error C2338: static_assert failed: 'duplicate type T in get<T>(tuple)'.
      Теперь он сообщает:
      error C2338: static_assert failed: 'get<T>(tuple<Types...>&) requires T to occur exactly once in Types.(N4971 [tuple.elemm]/5)'
    • Улучшена диагностика, если std::ranges::to не удается создать запрошенный результат. MSVC, используемый для отчета:
      error C2338: static_assert failed: 'the program is ill-formed per N4950 [range.utility.conv.to]/2.3'
      Теперь он сообщает:
      error C2338: static_assert failed: 'ranges::to requires the result to be constructible from the source range, either by using a suitable constructor, or by inserting each element of the range into the default-constructed object. (N4981 [range.utility.conv.to]/2.1.5)'

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

Выпущено в мае 2024 г.

Дополнительные сведения Смотрите
Новые возможности для разработчиков C++ Новые возможности разработчиков C++ в Visual Studio 2022 17.10
Стандартные функции библиотеки (STL), объединенные функции C++26 и C++23, отчеты о дефектах C++20, разрешения проблем LWG, улучшения производительности, улучшенное поведение и исправленные ошибки Журнал изменений STL 17.10
Новые возможности интегрированной среды разработки Visual Studio 17.10 Заметки о выпуске Visual Studio 2022 версии 17.10
Улучшения соответствия языка C++ в Visual Studio 2022 17.10 Улучшения соответствия C++, изменения поведения и исправления ошибок в Visual Studio 2022 17.10

Частичный список новых функций:

  • Обновление набора инструментов MSVC: версия набора инструментов MSVC обновляется с версии 19.39 до 19.40. Это может повлиять на проекты с предположениями версий. Дополнительные сведения о некоторых способах, в которых это влияет на проекты, предполагающие, что версии MSVC являются всеми выпусками 19.3X для Visual Studio 2022, см. в статье MSVC Toolset Minor Version Number 14.40 в VS 2022 версии 17.10.
  • Усовершенствования стандартной библиотеки: стандартная библиотека добавила поддержку P2510R3 указателей форматирования, которая приводит набор описателей формата для указателей при использовании std::format дополнительных значений с теми, которые уже существуют для целых чисел. Улучшены std::min_elementвекторные реализации , std::ranges::minа также друзья.
  • Build Insights: теперь предоставляет сведения о создании экземпляра шаблона. Просмотр представлений шаблонов для Аналитики сборки в Visual Studio или в представлении шаблонов Pure Virtual C++ — представление шаблонов для Build Insights в записи Visual Studio .
  • Подключаемый модуль Unreal Engine: существует новая функция согласия для подключаемого модуля Unreal Engine для запуска в фоновом режиме, что снижает затраты на запуск. Это функция согласия, активируемая с помощью компонента Tools>Options>Unreal Engine.
  • Новые возможности Для Linux: ознакомьтесь с новыми функциями разработки Linux в Visual Studio.
  • Целевые объекты CMake: теперь можно закрепить целевые объекты в представлении целевых объектов CMake.
  • диспетчер подключений пользовательском интерфейсе. Взаимодействие с пользователем обеспечивает более простой интерфейс при подключении к удаленным системам. Дополнительные сведения см. в разделе "Улучшения удобства использования" в диспетчер подключений Visual Studio.
  • Комментарии запроса на вытягивание. Теперь вы можете просматривать комментарии GitHub и Azure DevOps непосредственно в рабочем файле. Включите флаг функции, примечания запроса на вытягивание в >функциях предварительной версии среды>и проверьте ветвь запроса на вытягивание, чтобы приступить к работе.
  • Содержимое, созданное искусственным интеллектом: GitHub Copilot теперь может создавать черновики описаний запроса на вытягивание. Требуется активная подписка GitHub Copilot. Попробуйте его, щелкнув значок "Добавить созданный запрос на вытягивание " в окне "Создать запрос на вытягивание".
  • Предварительный просмотр изображения: наведите указатель мыши на путь к изображению, чтобы просмотреть предварительный просмотр с подробными сведениями о размере. Размер ограничен 500 пикселей в ширину и высоту.

    Снимок экрана: просмотр наведения указателя мыши.

    Указатель мыши наведите указатель мыши на строку std::filesystem::p ath vs_logo_path = ".. /images/vs_logo.png". В нижней части отображается предварительная версия логотипа Visual Studio и сведения о размере 251 x 500 пикселей и 13,65 КБ.

  • Точка останова или создание точки трассировки. Теперь можно создавать условные точки останова или точки трассировки непосредственно из выражений в исходном коде из меню правой кнопкой мыши. Это работает над именами свойств или полей и значениями из авто, локальных элементов, окон просмотра или подсказок данных.
  • Присоединение к диалогу процесса. Функциональные возможности, предоставляемые диалогом "Присоединение к процессу", являются более удобными для пользователя. Теперь вы можете легко переключаться между представлениями дерева и списка, упорядочивать процессы лучше с помощью свертых разделов и выбирать типы кода с упрощенной папкой со списком. Кроме того, функция "Выбрать или отслеживать окно" теперь проще использовать, позволяя двустороннее отслеживание: выбор процесса выделяет его окно и щелчок окна выбирает его процесс.
  • Интеграция GitHub Copilot: расширения GitHub Copilot и Copilot Chat теперь унифицированы и теперь отправляются непосредственно в Visual Studio. Чтобы установить его, установите компонент GitHub Copilot в Visual Studio Installer:

    Снимок экрана: параметр установки Visual Studio Installer GitHub Copilot.

    Интерфейс GitHub Copilot находится в правом верхнем углу Visual Studio. Чтобы использовать его, вам нужна активная подписка на GitHub Copilot.

    Снимок экрана: кнопка GitHub Copilot.

    Кнопка GitHub Copilot отображается в правом верхнем углу Visual Studio. Он имеет параметры для открытия окна чата, параметров GitHub Copilot, получения дополнительных сведений и управления подпиской copilot.

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

Выпущено за февраль 2024 г.

Дополнительные сведения Смотрите
Новые возможности для разработчиков C++ Новые возможности разработчиков C++ в Visual Studio 2022 17.9
Стандартная библиотека (STL) объединяет функции C++23, улучшения производительности, улучшенное поведение, разрешение проблем LWG и исправленные ошибки Журнал изменений STL 17.9
Новые возможности интегрированной среды разработки Visual Studio 17.9 Заметки о выпуске Visual Studio 2022 версии 17.9
Улучшения соответствия языка C++ в Visual Studio 2022 17.9 Улучшения соответствия C++, изменения поведения и исправления ошибок в Visual Studio 2022
Сводка обновлений серверной части C++ Обновления серверной части MSVC с Visual Studio 2022 версии 17.3

Частичный список новых функций:

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

    Снимок экрана: #include диагностика.

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

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

    Снимок экрана: окно макета памяти

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

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

    Снимок экрана: диалоговое окно параметров CMake

    Диалоговое окно параметров 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++ в Visual Studio версии 17.8

Выпущено за ноябрь 2023 г.

Дополнительные сведения Смотрите
Новые возможности для разработчиков C++ Новые возможности для разработчиков C++ в Visual Studio 2022 17.8
Стандартная библиотека (STL) объединяет функции C++26, C++23, расширения C++20, разрешения проблем LWG, улучшения производительности, улучшенное поведение и исправленные ошибки. Журнал изменений STL 17.8
Новые возможности интегрированной среды разработки Visual Studio 17.8 Заметки о выпуске Visual Studio 2022 версии 17.8
Улучшения соответствия языка C++ в Visual Studio 2022 17.8 Улучшения соответствия C++, изменения поведения и исправления ошибок в Visual Studio 2022
Обзор улучшений C++ в Visual Studio, VS Code и vcpkg в течение 2023 г. Год улучшений C++

Частичный список новых функций:

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

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

Выпущено за август 2023 г.

Дополнительные сведения Смотрите
Новые возможности для разработчиков C++ Новые возможности разработчиков C++ в Visual Studio 2022 17.7
Новые возможности C++ для разработки игр Развязывание возможностей Visual Studio 2022 для разработки игр на C++
Стандартная библиотека (STL) объединяет функции C++23, решения проблем LWG, улучшения производительности, улучшенное поведение и исправленные ошибки Журнал изменений STL 17.7
Новые возможности интегрированной среды разработки Visual Studio 17.7 Заметки о выпуске Visual Studio 2022 версии 17.7
Улучшения соответствия языка C++ в Visual Studio 2022 17.7 Улучшения соответствия C++, изменения поведения и исправления ошибок в Visual Studio 2022

Частичный список новых функций:

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

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

Выпущено в мае 2023 г.

Дополнительные сведения Смотрите
Новые возможности для разработчиков C++ Новые возможности для разработчиков C++ в Visual Studio 2022 17.6
Стандартная библиотека (STL) объединяет функции C++23, решения проблем LWG, улучшения производительности, улучшенное поведение и исправленные ошибки Журнал изменений STL 17.6
Новые возможности интегрированной среды разработки Visual Studio 17.6 Заметки о выпуске Visual Studio 2022 версии 17.6
Улучшения соответствия языка C++ в Visual Studio 2022 17.6 Улучшения соответствия C++, изменения поведения и исправления ошибок в Visual Studio 2022

Частичный список новых функций включает в себя:

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

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

Выпущено за февраль 2023 г.

Дополнительные сведения Смотрите
Новые возможности для разработчиков C++ Новые возможности для разработчиков C++ в Visual Studio 2022 17.5
Стандартная библиотека (STL) объединяет функции C++23, решения проблем LWG, улучшения производительности, улучшенное поведение и исправленные ошибки Журнал изменений STL 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

Выпущено за ноябрь 2022 г.

Дополнительные сведения Смотрите
Новые возможности для разработчиков C++ Новые возможности для разработчиков C++ в Visual Studio 2022 17.4
Стандартная библиотека (STL) объединяет функции C++23, решения проблем LWG, улучшения производительности, улучшенное поведение и исправленные ошибки Журнал изменений STL 17.4
Новые возможности интегрированной среды разработки Visual Studio 17.4 Заметки о выпуске Visual Studio 2022 версии 17.4
Улучшения соответствия языка C++ в 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 в обозревателе тестов.

  • Обновлена версия 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

    • P1328R1 constexpr type_info::operator==()

    • ranges::iotaP2440R1 , ranges::shift_leftranges::shift_right

    • P2441R2 views::join_with

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

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

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

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

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

Выпущено за август 2022 г.

Дополнительные сведения Смотрите
Новые возможности для разработчиков C++ Улучшения C++ в версии 17.3
Стандартная библиотека (STL) объединяет функции C++23, решения проблем LWG, улучшения производительности, улучшенное поведение и исправленные ошибки Журнал изменений STL 17.3
Новые возможности интегрированной среды разработки Visual Studio 17.3 Заметки о выпуске Visual Studio 2022 версии 17.3
Улучшения соответствия языка C++ в Visual Studio 2022 17.3 Улучшения соответствия C++, изменения поведения и исправления ошибок в Visual Studio 2022

Частичный список новых функций в версии 17.3:

  • Цепочка инструментов 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

Выпущено май 2022 г.

Дополнительные сведения Смотрите
Новые возможности для разработчиков C++ Выпущена версия Visual Studio 2022 17.2
Стандартные отчеты об ошибках C++20, функции C++23, решения проблем LWG, улучшения производительности, улучшенное поведение и исправление ошибок Журнал изменений STL 17.2
Новые возможности интегрированной среды разработки Visual Studio 17.2 Заметки о выпуске Visual Studio 2022 версии 17.2
Улучшения соответствия языка C++ в Visual Studio 2022 17.2 Улучшения соответствия C++, изменения поведения и исправления ошибок в Visual Studio 2022

Частичный список новых функций в версии 17.2.

  • Добавлена поддержка компилятора функции 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

Выпущено за февраль 2022 г.

Дополнительные сведения Смотрите
Новые возможности для разработчиков C++ Visual Studio 2022 17.1 теперь доступен!
Стандартная библиотека (STL) объединяет функции C++23, решения проблем LWG, улучшения производительности, улучшенное поведение и исправленные ошибки Журнал изменений STL 17.1
Новые возможности интегрированной среды разработки Visual Studio 17.1 Заметки о выпуске Visual Studio 2022 версии 17.1
Улучшения соответствия языка C++ в Visual Studio 2022 17.1 Улучшения соответствия C++, изменения поведения и исправления ошибок в 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

Выпущено за ноябрь 2021 г.

Дополнительные сведения Смотрите
Новые возможности интегрированной среды разработки Visual Studio 17.0 Заметки о выпуске Visual Studio 2022 версии 17.0
Стандартные функции библиотеки (STL), объединенные функции C++23 и C++26, отчеты о дефектах C++20, разрешения проблем LWG, улучшения производительности, улучшенное поведение и исправленные ошибки Журнал изменений STL 17.0
Улучшения соответствия языка C++ в Visual Studio 2022 17.0 Улучшения соответствия C++, изменения поведения и исправления ошибок в Visual Studio 2022 17.10

Обзор некоторых новых функций в 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::string constexpr в VS 2019 версии 16.10. Теперь поддерживается для Clang.
  • P1004R2 Создан std::vector constexpr в VS 2019 версии 16.10. Теперь поддерживается для Clang.

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

  • P1048R1 Добавлен is_scoped_enum, новый признак для стандартной библиотеки C++, который определяет, является ли тип ограниченным перечислением.
  • P1132R7 out_ptr(), inout_ptr().
  • P1679R3 contains() для basic_string и basic_string_view.
  • P1682R3 to_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++ IntelliSense

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

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

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

Блоги

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