Новые возможности для C++ в Visual Studio 2022
Visual Studio 2022 содержит множество обновлений и исправлений в компилятор и средства Microsoft C++. Visual Studio IDE также предлагает значительные улучшения производительности и продуктивности и теперь работает в виде собственного 64-разрядного приложения.
- Дополнительные сведения о новых возможностях visual Studio см. в статье "Новые возможности Visual Studio 2022".
- Дополнительные сведения о новшествах в документации по C++ см. в разделе "Документация по Microsoft C++: Что нового".
- Сведения о датах сборки версий см. в разделе История выпусков Visual Studio 2022.
Новые возможности C++ в Visual Studio версии 17.13
Выпущено в феврале 2025 г.
Более подробная информация о | Смотрите |
---|---|
Новые возможности для разработчиков C++ | Новые возможности разработчиков C++ в Visual Studio 2022 17.13 |
Стандартная библиотека (STL) объединяет функции C++26 и C++23, разрешения проблем LWG, улучшения производительности, улучшенное поведение и исправленные ошибки | STL Changelog 17.13 |
Новые возможности в интегрированной среде разработки | Примечания к выпуску Visual Studio 2022 версии 17.13 |
Обновления языка C++ | обновления компилятора MSVC в Visual Studio 2022 17.13 |
Улучшения соответствия языка C++ | Усовершенствование соответствия стандарту C++, изменения в поведении и исправление ошибок в Visual Studio 2022 17.13 |
Краткий обзор некоторых новых функций:
улучшения языка C++
Попробуйте использовать функции предварительной версии C++23, установив стандарт языка C++ на
/std:c++23preview
. Этот параметр включает последние функции и исправления ошибок C++23. Дополнительные сведения см. в /std (указание стандартной версии языка).Поддержка суффикса
size_t
литералов в C++23, который помогает избежать усечения и несоответствий при сравнении знаковых чисел, особенно при написании циклов. Например:// Infinite loop if v.size > max unsigned int for (auto i = 0u; i < v.size(); ++i) { ... } // Fixed because of uz literal for (auto i = 0uz; i < v.size(); ++i) { ... }
Поддержка длины векторов для создания кода в x86 и x64. Дополнительные сведения см. /vlen.
Поддержка Intel AVX версии 10.1. Дополнительные сведения о
/arch:AVX10.1
см. в /arch (x64).
Усиление стандартной библиотеки
Поддержка стандартной библиотеки для couroutines. В этом примере из P2502R2 функция
fib
является корутиной. При выполнении инструкцииco_yield
выполнениеfib
приостанавливается, и значение возвращается вызывающему объекту. Вы можете возобновить работуfib
корутины позже, чтобы получить больше значений, не требуя ручной обработки состояния.std::generator<int> fib() { auto a = 0, b = 1; while (true) { co_yield std::exchange(a, std::exchange(b, a + b)); } } int answer_to_the_universe() { auto rng = fib() | std::views::drop(6) | std::views::take(3); return std::ranges::fold_left(std::move(range), 0, std::plus{}); }
Перемещены
system_clock
,high_resolution_clock
иchrono_literals
из обычно включенного внутреннего заголовка в<chrono>
. Если вы видите ошибки компилятора, например, типы, такие какsystem_clock
, или литералы, определяемые пользователем, такие как1729ms
, которые не распознаются, включите<chrono>
.Улучшены векторные реализации конструкторов
bitset
из строк,basic_string::find_last_of()
,remove()
,ranges::remove
, а также семейства алгоритмовminmax_element()
иminmax()
.Добавлены векторные реализации:
-
find_end()
иranges::find_end
для 1-байтов и 2-байтовых элементов. -
basic_string::find()
иbasic_string::rfind()
для подстроки. -
basic_string::rfind()
для одного символа.
-
Объединенные отчеты о дефектах C++23:
GitHub Copilot
Теперь доступна бесплатная версия GitHub Copilot. Получите 2000 завершений кода и 50 запросов чата в месяц без затрат.
Завершение кода в GitHub Copilot предлагает автозаполнение прямо в процессе написания кода. Чтобы улучшить опыт разработчиков C++, GitHub Copilot включает другие соответствующие файлы в качестве контекста. Это уменьшает галлюцинации, предлагая более релевантные и точные предложения.
Теперь вы можете запросить проверку кода из GitHub Copilot в окне изменений Git:
Окно изменений в Git открыто с подсвеченной кнопкой проверки GitHub Copilot.
GitHub Copilot ищет потенциальные проблемы и создает комментарии для них:
GitHub Copilot обнаружил проблему со строкой: if (is_enabled_) new_site.disable(). Указывается, что это может быть ошибкой и, вероятно, должно быть if (is_enabled_) new_site.enable(), потому что цель, кажется, заключается в том, чтобы включить новый сайт, если точка останова активирована.
Чтобы использовать эту функцию, убедитесь, что включена следующая функция:
- Инструменты>Параметры>Функции предварительного просмотра>Комментарии к пулл-реквесту
- Сервис>Параметры>GitHub>Copilot>Интеграция системы управления версиями>Включить предварительные версии функций Git.
GitHub Copilot Edits — это новая функция, которая может вносить изменения в несколько файлов в проекте. Чтобы начать новый сеанс редактирования, щелкните Создать новый сеанс в верхней части окна чата GitHub Copilot.
Опишите изменения, которые вы хотите внести, и Copilot предложит соответствующие изменения. Вы можете просматривать изменения по одному и, если захотите, принять нужные или оставить исправления:
GitHub Copilot отображает сводку внесенных изменений, например 1. Создайте новый подкласс range_breakpoint в include/libsdb/breakpoint.hpp и 2. Реализуйте класс range_breakpoint в src/breakpoint.cpp. Отображается параметр принятия изменений.
Для получения дополнительной информации о том, как более эффективно итеративно обрабатывать несколько файлов с помощью GitHub Copilot Edits, см. .
CMake
- Теперь поддерживает предустановки CMake версии 9. Новые расширения макросов в поле включения предустановки. Для получения дополнительной информации см. раздел Расширение макросов в официальной документации по CMake.
Новые возможности 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
,queue
иpriority_queue
. - Добавлены многомерные операторы подстрочного, которые также поддерживают
<mdspan>
. Например:print("m[{}, {}]: '{}'; ", i, j, m[i, j])
.
- Реализация диапазонов форматирования (P2286R8) C++23 завершена. Добавлены модули форматирования для адаптеров контейнеров
-
Разработка игр в C++
- Открывайте проекты Unreal Engine в Visual Studio напрямую, без необходимости генерации файла решения Visual Studio для обертки проекта Unreal Engine. Дополнительные сведения см. в статье "Работа с проектами Unreal Engine" в Visual Studio.
- Можно указать аргументы командной строки для передачи при отладке непосредственно с панели инструментов. Дополнительные сведения см. в разделе "Настройка аргументов командной строки" для проектов Unreal Engine.
-
Инсайты по сборке
- Вы можете запустить Build Insights для выбранных файлов. Выберите нужные файлы в "Обозревателе решений", щелкните правой кнопкой мыши и выберите команду "Запустить аналитику сборки для выбранных файлов":
- Результаты Build Insights можно фильтровать по проекту. Нажмите кнопку фильтра в заголовке столбца фильтра и выберите проекты, для которого нужно просмотреть результаты:
- Щелкните значок вопросительного знака в окне "Аналитика сборки", чтобы просмотреть краткое описание вкладок в окне "Аналитика сборки" и ссылку на документацию для подробного объяснения:
- Вы можете запустить Build Insights для выбранных файлов. Выберите нужные файлы в "Обозревателе решений", щелкните правой кнопкой мыши и выберите команду "Запустить аналитику сборки для выбранных файлов":
-
GitHub Copilot
- Вы можете щелкнуть Ask Copilot рядом со значением переменной, чтобы получить аналитические сведения, управляемые искусственным интеллектом, в том, что привело к текущему состоянию. Например, в следующей программе есть ошибка "off-by-one" в условии цикла.
Если щелкнуть значок Ask Copilot для переменнойКод, который вызвал эту проблему: for (auto it = h.animals_.begin(); it <= h.animals_.end(); it++).
it
, он сообщает, почему это<NULL>
:Эта ошибка находится внутри функции, определенной как int calculate_number_of_cats(const house& h). Сообщение GitHub Copilot говорит: "Значение выражения равно NULL, что означает, что итератор не указывает ни на какой допустимый элемент в векторе animals_. В контексте вашей программы предполагается перебор вектора animals_ в объекте house для подсчета количества объектов cat. Почему null. С учетом локальных переменных и контекста стека вызовов: объект house имеет пустой вектор animals_ (размер=0). Условие цикла it <= h.animals_.end() неверно. Это должно быть != h.animals_.end()."
- Вы можете щелкнуть "Попросить Copilot", чтобы получить помощь по ошибкам в Списке ошибок Visual Studio и предложенное исправление. Например:
Если щелкнуть Ask Copilot, он сообщает об ошибке:Значок "Ask Copilot" выделен рядом с ошибкой, в которой unique_ptr пытается сослаться на удалённую функцию.
Сообщение copilot говорит: "Ошибка возникает из-за того, что диапазонный цикл for пытался скопировать объекты std::unique_ptr, что невозможно, так как std::unique_ptr не может быть скопирован. Чтобы устранить эту проблему, я изменил цикл, чтобы использовать ссылку, чтобы избежать копирования объектов std::unique_ptr. Таким образом, цикл выполняет итерацию по ссылкам на объекты std::unique_ptr, что допускается.
-
Отладка
- Новые визуализаторы отладки для
mutex
,recursive_mutex
иmove_iterator
. - Теперь отладчик отображает возвращаемые значения в линия:
- Новые визуализаторы отладки для
Новые возможности 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()
,ranges::replace_copy
ranges::replace_copy_if
find_first_of()
иranges::find_first_of
, для 8-разрядных и 16-разрядных элементов,mismatch()
,ranges::mismatch
count()
ranges::count
find()
ranges::find
ranges::find_last
ranges::iota
и .
- Форматирование выходных данных теперь включает
Разработка игр в 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, и выбраны проекты такие как (Выбрать все), 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 может создавать предложения именования для идентификаторов (переменных, методов или классов) на основе использования идентификатора и стиля кода.
В диалоговом окне "Переименование" есть поле "Новое имя" со раскрывающимся списком, где показаны следующие варианты: text_color, font_color, display_color, console_color и menu_text_color.
Вам нужна активная подписка на GitHub Copilot. Щелкните правой кнопкой мыши переменную, которую вы хотите переименовать, и выберите " Переименовать " (
Ctrl+R
,Ctrl+R
). Нажмите на значок "искрящийся" GitHub Copilot, чтобы генерировать предложенные варианты имен.Отладка
- Условные точки останова в 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, позволяющая запускаться в фоновом режиме и снижать затраты на запуск. Это функция с возможностью подключения, активируемая через Инструменты>Параметры>Unreal Engine.
- Новые возможности Для Linux: ознакомьтесь с новыми функциями разработки Linux в Visual Studio.
- Целевые объекты CMake: теперь можно закрепить целевые объекты в представлении целевых объектов CMake.
- UX диспетчера подключений: Улучшенный пользовательский опыт обеспечивает более бесшовное подключение к удаленным системам. Дополнительные сведения см. в разделе Улучшения удобства использования в диспетчере подключений Visual Studio.
- Комментарии пулреквеста: Теперь вы можете просматривать комментарии GitHub и Azure DevOps непосредственно в рабочем файле. Включите флаг функции Примечания к запросу на вытягивание в Опции>Окружающая среда>Предварительные функции и переключитесь на ветвь запроса на вытягивание, чтобы начать.
- Контент, созданный ИИ: GitHub Copilot теперь может создавать черновики описаний pull request. Требуется активная подписка GitHub Copilot. Попробуйте, нажав на значок «Добавить автоматически сгенерированное описание pull request» в окне «Создать pull request».
-
Предварительный просмотр изображения: наведите указатель мыши на путь к изображению, чтобы просмотреть предварительный просмотр с подробными сведениями о размере. Размер ограничен 500 пикселей в ширину и высоту.
Курсор мыши наведен на строку std::filesystem::path 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:
Интерфейс GitHub Copilot находится в правом верхнем углу Visual Studio. Чтобы использовать его, вам нужна активная подписка на 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, перейдя к Build>Запустите Build Insights на решении>Build.Над #include находится ссылка **reference**, и многие ссылки на этот файл #include (в данном случае - одно упоминание). Время сборки также указано (в этом случае меньше 1/2 секунды).
- Визуализация макета памяти, в которой показано, как организована память для классов, структур и профсоюзов. Наведите указатель мыши на тип и выберите ссылку "Макет памяти" в краткой информации , чтобы открыть выделенное окно, отображающее макет памяти выбранного типа. Наведите указатель мыши на отдельные типы данных в этом окне, чтобы предоставить подробные сведения об их размере и смещении в типе.
В окне макета памяти отображается содержимое класса Змеи. В нем показаны смещения памяти различных полей классов, таких как Point для определения местоположения головы и тела, счета и т. д.
- Теперь можно указать собственный исполняемый файл CMake. Эта функция полезна, если вы хотите использовать определенную версию CMake, которая не поставляется с Visual Studio. Перейдите к параметрам инструментов>и выберите "Общие" CMake.> Выберите Включить исполняемый файл CMake по умолчанию и укажите путь к каталогу исполняемого файла CMake.
Диалоговое окно параметров CMake с параметром "Включить настраиваемую исполняемую программу CMake" и выделенным полем "Каталог исполняемой программы CMake".
- Улучшена технология IntelliSense для проектов Unreal Engine.
- Улучшена поддержка C++23:
std::format
иstd::span
formattable
,range_format
,format_kind
, иset_debug_format()
в рамках форматирования диапазонов P2286R8 согласно 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 в виде фрагментов в списке участников.
- Build 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 и подсветка синтаксиса, возможность найти все ссылки на Blueprints 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 (High Level Shading Language)
- Средство просмотра журнала 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::forward
std::move_if_noexcept
иstd::forward_like
теперь не создают вызовы функций в созданном коде даже в режиме отладки. Это изменение позволяет избежать именованных приведений, вызывающих избыточные накладные расходы в сборках отладки./permissive-
(или вариант, который подразумевает его, например/std:c++20
илиstd:c++latest
) является обязательным.Добавлен.
[[msvc::intrinsic]]
Этот атрибут можно применять к нерекурсивным функциям, состоящим из одного приведения, которое принимает только один параметр.Добавлена поддержка консоли Linux в интегрированном терминале, которая позволяет выполнять ввод-вывод терминала.
Добавлена начальная экспериментальная поддержка атомарных примитивов C11 (
<stdatomic.h>
). Эту экспериментальную функцию можно включить с параметром/experimental:c11atomics
в/std:c11
режиме или более поздней версии.Добавлен новый набор экспериментальных проверок высокой достоверности в средство проверки времени существования для снижения шума.
Новая функция предварительного просмотра, Удалённый Проводник, позволяет просматривать каталог файлов на удалённых компьютерах в Visual Studio, а также загружать и скачивать файлы.
Изменена нумерация версий исполняемых файлов 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.
Добавлен параметр "Открыть контейнер в терминале" в контейнеры разработки.
Реализованы стандартные функции библиотеки:
Новые возможности 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 .
Добавлена поддержка артефактов vcpkg в Visual Studio для проектов CMake. Для проектов, включающих манифест vcpkg, среда активируется автоматически при открытии проекта. Узнайте больше об этой функции в записи блога Visual Studio об активации среды vcpkg.
Теперь вы можете использовать контейнеры разработки для проектов C++. Дополнительные сведения об этой функции см. в записи блога "Контейнеры разработки для C++ ".
IntelliSense теперь учитывает порядок предварительно включаемых заголовков, когда один из них является PCH. Ранее, когда PCH использовался через
/Yu
и принудительно включался с помощью/FI
, IntelliSense всегда обрабатывал его в первую очередь, перед любыми другими заголовками, включенными через/FI
. Это поведение не совпадало с поведением сборки. В результате этого изменения заголовки/FI
обрабатываются в указанном порядке.Удалены внутренние префиксы из имен CTest в обозревателе тестов.
Обновлена версия CMake, поставляемая с Visual Studio, до версии 3.24.1. Для получения подробностей о том, что доступно, см. заметки о выпуске CMake.
Обновление пакета SDK для Android:
- Скрипты Ant были удалены, поэтому пользователи больше не видят шаблонов на основе 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
в ваши параметры компилятора:P2302R4
ranges::contains
,ranges::contains_subrange
P2499R0
string_view
Конструктор диапазона должен бытьexplicit
P0849R8
auto(x)
: копирование с затуханием в языке(Часть компилятора еще не реализована. Часть библиотеки была реализована в режиме C++20 при первоначальной реализации поддержки Ranges.)
P2301R1 добавить псевдоним
pmr
дляstd::stacktrace
Добавлен параметр "Навигация после создания объявления или определения", позволяющий выбрать поведение навигации функции "Создать объявление или определение". Вы можете выбрать между просмотром (по умолчанию) или открытием документа или без навигации.
Теперь сборки 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
, меток case, возврата типаenum
и т. д.), список автозаполнения теперь фильтруется так, чтобы показывать только соответствующие перечислители и связанные конструкции. - Добавлена поддержка NuGet PackageReference для проектов C++/CLI MSBuild, предназначенных для .NET Core. Это изменение было внесено для разблокировки смешанных баз кода от возможности внедрения .NET Core. Эта поддержка не работает для других типов проектов C++ или любых типов проектов C++, предназначенных для платформа .NET Framework. Нет планов расширить поддержку PackageReference в других сценариях C++. Команда работает над отдельными возможностями, связанными с vcpkg для сценариев, отличных от MSBuild, и для добавления дополнительных функциональных возможностей.
- Добавлено окно последовательного монитора для встроенной разработки, доступное через Отладка>Окна>Последовательный монитор.
- Улучшено индексирование C++ на ~66% по сравнению с 17,2.
- Обновлена версия CMake, поставляемая с Visual Studio, до версии 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 |
Стандартная библиотека (STL), объединенные отчеты о дефектах 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. Это поведение можно настроить в разделе > (Инструменты, Параметры, Текстовые редакторы, C/C++, IntelliSense).
- Добавлена экспериментальная поддержка модулей C++20 в проектах CMake. Сейчас эта поддержка доступна только для генератора Visual Studio (MSBuild).
- В версии 17.1 впервые появились представления периферийных регистров и ОСРВ для разработчиков встроенных платформ. Мы продолжаем улучшать функциональные возможности этих представлений, повышая удобство использования в 17.2.
- Окно инструментов ОСРВ теперь по умолчанию скрыто. Это предотвращает появление окна инструментов с сообщениями об ошибках, которые не имеют значения, когда ОСРВ не используется.
- При двойном щелчке на объекте RTOS в окне инструмента добавляется наблюдение за объектом.
- При выборе начальных и конечных значений указателя стека в окне инструментов ОСРВ это окно откроется в окне памяти.
- Добавлена осведомленность о потоках для целевых объектов устройств в окне стека вызовов.
- Теперь пользователи могут выбрать значок кнопки рядом с периферийными устройствами, регистрами или полями, чтобы прикрепить их к началу Вида периферийных устройств.
- Добавлены реализации оставшихся отчетов о дефектах в C++20 (также известных как backports). В параметре
/std:c++20
теперь доступны все функции C++20. Дополнительные сведения о реализованных серверных портах см. в журнала изменений VS 2022 в репозитории Microsoft/STL GitHub и записи блога STL Завершено/std:c++20
MSVC. - Мы добавили различные функции библиотеки 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:
- Добавлен новый шаблон Configure Preset для настройки и сборки проектов 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 с уведомлением. - Новые представления, позволяющие проверять и взаимодействовать с периферийными регистрами в микроконтроллерах и объектах операционных систем реального времени (ОСРВ), доступны через Отладка>Окна>Встроенные регистры.
- Добавлено новое представление потоков для проектов ОСРВ, доступное через Отладка>Окна>Объекты ОСРВ. Дополнительные сведения см. в статье 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++ в Visual Studio 2019 см. в статье Новые возможности C++ в Visual Studio 2019.
- Сведения о новых возможностях C++ в Visual Studio 2017 см. в статье Новые возможности C++ в Visual Studio 2017.
- Сведения о новых возможностях более ранних версий см. в статье Visual C++ What's new 2003–2015.
Известные проблемы
C++ IntelliSense
Дополнительные сведения о других открытых проблемах и доступных решениях для C++ в Visual Studio 2022 см. в списке проблем для сообщества разработчиков C++.
Отзывы и предложения
Мы хотели бы услышать ваше мнение! Вы можете сообщить о проблеме или предложить функцию с помощью значка "Отправить отзыв" в правом верхнем углу установщика или Visual Studio IDE или в меню Справка>Отправить отзыв. Вы можете отслеживать проблемы в сообществе разработчиков Visual Studio, позволяющем добавлять комментарии или искать решения. Кроме того, вам доступна бесплатная поддержка в чате по вопросам с установкой.
Блоги
Воспользуйтесь преимуществами аналитических сведений и рекомендаций, доступных на сайте блогов разработчиков Майкрософт, чтобы оставаться в курсе всех новых выпусков . В блогах можно найти записи, подробно изучающие разнообразные функции. Блог команды C++ и блог Visual Studio имеют особый интерес.