Новые возможности для C++ в Visual Studio 2022
В Visual Studio 2022 реализовано множество обновлений и исправлений для среды Microsoft C++. Мы добавили новые функции и исправили множество ошибок и проблем с компилятором и инструментами. Visual Studio IDE также предлагает значительные улучшения производительности и продуктивности и теперь работает в виде собственного 64-разрядного приложения. Дополнительные сведения о новых возможностях всех компонентов Visual Studio см. на странице Новые возможности Visual Studio 2022. Сведения об изменениях в документации по C++ см. в разделе Документация по C++: новое.
Новые возможности C++ в Visual Studio версии 17.1
Сводку о новых возможностях и исправлениях ошибок в Visual Studio см. в статье Новые возможности 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
определяется на другом уровне рабочей области, появится уведомление, предлагающее активировать интеграцию Visual Studio с CMake.Добавлено новое окно визуализации регистра внедренных целевых объектов, доступное в меню Отладка>Окна>Внедренные регистры.
Добавлено новое представление цепочек для проектов ОСРВ, доступное в меню Отладка>Окна>Объекты ОСРВ.
Новые возможности C++ в Visual Studio версии 17.0
Сводку о новых возможностях и исправлениях ошибок в Visual Studio см. в статье Новые возможности Visual Studio 2022 версии 17.0.
Visual Studio IDE,
devenv.exe
, теперь является собственным 64-разрядным приложением.Набор инструментов MSVC теперь по умолчанию используется для хэширования источника SHA-256 в отладочных записях. Ранее набор инструментов использовал MD5 для хэширования источника по умолчанию.
Средства сборки версии 143 теперь доступны благодаря установщику Visual Studio, а также в автономных средствах сборки.
Горячая перезагрузка для машинного кода C++
- Горячая перезагрузка для C++ позволяет вносить в выполняемое приложение изменения кода разных типов и применять их без необходимости приостанавливать его с помощью точки останова или аналогичного средства.
В Visual Studio 2022 при запуске приложения в отладчике можно использовать кнопку горячей перезагрузки для внесения изменений во время выполнения приложения. Этот интерфейс работает на основе собственного режима "Изменить и продолжить". Дополнительные сведения о поддерживаемых изменениях см. по ссылке Изменить и продолжить (C++).
- Горячая перезагрузка теперь поддерживает проекты CMake и OpenFolder.
Поддержка WSL2
- Теперь вы можете выполнять сборку и отладку собственного кода в WSL2 без установления SSH-подключения. Поддерживаются кросс-платформенные проекты CMake и проекты Linux на основе MSBuild.
Улучшенная поддержка CMake
Мы обновили версию CMake, поставляемую с Visual Studio, до версии 3.21. Дополнительные сведения о доступных функциях этой версии см. в заметках о выпуске CMake 3.21.
Обновлены страницы обзора CMake для поддержки
CMakePresets.json
.Теперь вы можете настраивать проекты CMake и выполнять их сборку с помощью CMake 3.21 и
CMakePresets.json
версии 3.Visual Studio теперь поддерживает параметр
buildPresets.targets
вCMakePresets.json
. Он позволяет создать набор целевых объектов в проекте CMake.Меню "Проект" в проектах CMake упрощено и предоставляет варианты "Удалить кэш и изменить конфигурацию" и "Просмотреть кэш".
Реализован параметр компилятора
/scanDependencies
для перечислений зависимостей модуля C++20 в проектах CMake, как описано в P1689R4. Это шаг к поддержке создания проектов на основе модулей с помощью 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_
.Мы улучшили обнаружение разыменования пустого указателя в средствах анализа кода.
Добавлена поддержка
gsl::not_null
для анализа кода.Поддержка libFuzzer с параметром компилятора
/fsanitize=fuzzer
.
Заметки о выпусках более ранних версий
Также доступны заметки о выпусках более ранних версий C++. Сведения о новых возможностях C++ в Visual Studio 2019 см в статье Новые возможности C++ в Visual Studio 2019. Сведения о новых возможностях C++ в Visual Studio 2017 см в статье Новые возможности C++ в Visual Studio 2017. Сведения о новых возможностях в более ранних версиях см. в статье Visual C++. Новые возможности в версиях с 2003 по 2015.
Известные проблемы
C++ IntelliSense
Дополнительные сведения о других открытых проблемах и доступных решениях для C++ в Visual Studio 2022 см. в списке проблем для сообщества разработчиков C++.
Отзывы и предложения
Будем рады узнать ваше мнение! Вы можете сообщить о проблеме или предложить функцию с помощью значка "Отправить отзыв" в правом верхнем углу установщика или Visual Studio IDE или в меню Справка>Отправить отзыв. Вы можете отслеживать проблемы в сообществе разработчиков Visual Studio, позволяющем добавлять комментарии или искать решения. Кроме того, вам доступна бесплатная поддержка в чате по вопросам с установкой.
Блоги
Воспользуйтесь аналитикой и рекомендациями, доступными на сайте Microsoft Developer Blogs (Блоги разработчиков Майкрософт). Они будут держать вас в курсе всех новых выпусков. В блогах можно найти записи, подробно изучающие разнообразные функции. Вам непременно понравятся C++ Team Blog (блог команды разработчиков C++) и Visual Studio Blog (блог Visual Studio).