Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В Visual Studio 2019 реализовано множество изменений и исправлений для среды Microsoft C++. Мы исправили множество ошибок и проблем с компилятором и средствами. Сообщения о многих из них были отправлены клиентами с помощью инструментов Сообщить о проблеме и Отправить предложение в разделе Отправить отзыв. Спасибо, что сообщаете нам об ошибках!
Дополнительные сведения о новых возможностях всех компонентов Visual Studio см. на странице What's new in Visual Studio 2019 (Новые возможности Visual Studio 2019). Сведения о новых возможностях C++ в Visual Studio 2017 см. в статье Новые возможности C++ в Visual Studio 2017. Сведения о новых возможностях для C++ в Visual Studio 2015 и более ранних версиях см. в статье Visual C++ What's New 2003 through 2015 (Новые возможности Visual C++ в версиях с 2003 по 2015).
Новые возможности C++ в Visual Studio версии 16.11
Сводку о новых возможностях и исправлениях ошибок в Visual Studio версии 16.11 см. в статье Новые возможности Visual Studio 2019 версии 16.11.
Теперь компилятор поддерживает
/std:c++20режим компилятора. Ранее функции C++20 были доступны только в/std:c++latestрежиме в Visual Studio 2019. Функции, изначально требовавшие включения режима/std:c++latest, теперь работают в режиме/std:c++20или более поздних версий в последних версиях Visual Studio.Средства LLVM, поставляемые с Visual Studio, были обновлены до LLVM 12. Дополнительные сведения см. в заметках о выпуске LLVM.
Поддержка Clang-cl была обновлена до LLVM 12.
Новые возможности C++ в Visual Studio версии 16.10
Сводку о новых возможностях и исправлениях ошибок в Visual Studio версии 16.10 см. в статье Новые возможности Visual Studio 2019 версии 16.10.
Все функции C++20 теперь доступны в режиме
/std:c++latest. Хотя реализация MSVC стандартов C++20 (как опубликовано в настоящее время ISO) завершена, ожидается, что некоторые ключевые функции библиотеки C++20 будут изменены предстоящими отчетами об ошибках (исправления ошибок ISO C++20), которые могут привести к изменениям, несовместимым с ABI. Дополнительные сведения см. в разделе Проблема Майкрософт/STL 1814.- В версии 16.10 добавлена поддержка немедленных функций и constinit C++20.
- Заключительные части
<chrono>: новые часы, високосные секунды, часовые пояса и разбор. - Реализация
<format>для форматирования текста.
/openmp:llvmтеперь доступен на процессорах x86 и ARM64 в дополнение к x64.Включаемые директории теперь могут назначаться внешними с настроенными уровнями предупреждений компиляции и параметрами анализа кода.
Добавлен параметр
/await:strictдля включения сопрограмм в стиле C++20 в более ранних языковых режимах.Визуализация отладчика
std::coroutine_handle<T>теперь отображает имя и сигнатуру исходной функции сопрограммы, а также актуальную точку приостановки.Добавлена поддержка для CMakePresets.
Теперь при добавлении нового удаленного подключения в Visual Studio вам потребуется принять или отклонить отпечаток ключа узла, представленный сервером.
Добавлен параметр
/externalв MSVC для указания заголовков, которые в целях вывода предупреждений должны обрабатываться как внешние.
Новые возможности C++ в Visual Studio версии 16.9
Сводные сведения о новых возможностях и исправлениях ошибок в Visual Studio версии 16.9 см. в статье Новые возможности Visual Studio 2019 версии 16.9.
-
Поддержка санитайзера адресов в Windows вышла из экспериментального режима и теперь общедоступна.
Расширена поддержка
RtlAllocateHeap, устранена проблема совместимости для перехватчиковRtlCreateHeapиRtlAllocateHeapпри создании исполняемых пулов памяти.Добавлена поддержка устаревшего семейства функций работы с памятью
GlobalAllocиLocalAlloc. Вы можете включить эти перехватчики, установив флаг средыASAN_OPTIONS=windows_hook_legacy_allocators=true.Обновлены сообщения об ошибках, связанные с пересечением теневой памяти и сбоями перехвата, чтобы предоставлять четкие сведения о проблемах и методах решения.
Интеграция с интегрированной средой разработки теперь поддерживает полную коллекцию исключений, о которых может сообщать ASan.
Компилятор и компоновщик предложат сгенерировать отладочную информацию, если обнаружат, что сборка выполняется с использованием ASan, но отладочная информация не генерируется.
Теперь вы можете нацелиться на версию LLVM среды выполнения OpenMP с помощью нового параметра компилятора
/openmp:llvm. Это добавляет поддержку конструкцииlastprivate, используемой в разделах#pragma omp, и беззнаковых индексных переменных в параллельных циклахfor. Параметр/openmp:llvmв настоящее время доступен только для целевой платформы amd64 и считается экспериментальным.Для проектов Visual Studio CMake теперь предоставляется первоклассная поддержка удаленной разработки Windows. Сюда включается настройка проекта CMake для целевой платформы Windows ARM64, развертывание проекта на удаленном компьютере Windows и его отладка на удаленном компьютере Windows из Visual Studio.
Версия Ninja, поставляемая с Visual Studio в Windows, была обновлена до 1.10. Дополнительные сведения о включенных возможностях см. в заметках о выпуске Ninja 1.10.
Версия CMake, поставляемая с Visual Studio, была обновлена до 3.19. Дополнительные сведения о включенных возможностях см. в заметках о выпуске CMake 3.19.
В библиотеке STL многие типы блокировок и защитных механизмов помечены как
nodiscard.IntelliSense.
Улучшена стабильность и функционал IntelliSense в части обеспечения автозавершения для импортируемых модулей и блоков заголовков.
Добавлена функция "Перейти к определению" для импорта модулей, поддержка индексирования
export {...}и более точная ссылка на модуль для модулей с одинаковым именем.Улучшена совместимость IntelliSense с языком C++ за счет добавления поддержки копии временного объекта при прямой инициализации ссылки,
__builtin_memcpyи__builtin_memmove, исправления несоответствий между функциямиconstexprиconsteval, продления времени жизни временных объектов в константных выражениях, а также аналогичных типов и привязки ссылок.Добавлено завершение для make_unique, make_shared, emplace и emplace_back, что обеспечивает завершение на основе указанного параметра типа.
MSVC теперь определяет правильные среды выполнения для санитайзера адресов, необходимые для двоичных файлов. Проект Visual Studio автоматически получит новые изменения. При использовании санитайзера адресов в командной строке теперь необходимо передать компилятору только
/fsanitize=address.Диспетчер соединений Visual Studio теперь поддерживает закрытые ключи с помощью алгоритма открытого ключа ECDSA.
LLVM и Clang, поставляемые в нашем установщике, обновлены до версии 11. Дополнительные сведения см. в заметках о выпуске для LLVM и Clang.
Теперь Visual Studio будет использовать переменные CMake из файлов цепочки инструментов для настройки IntelliSense. Это обеспечит лучшую производительность при разработке встраиваемых приложений и Android.
Реализация предложения о дополнительных контейнерах constexpr, которая позволяет деструкторам и новым выражениям представлять
constexpr. Это создает условия для использования таких служебных программ, какconstexprstd::vectorиstd::string.Расширенная поддержка IntelliSense для модулей C++20, включая переход к определению, переход к модулю и завершение элементов.
Сокращенные шаблоны функций теперь поддерживаются в компиляторе MSVC.
Новые возможности C++ в Visual Studio версии 16.8
Сводные сведения о новых возможностях и исправлениях ошибок в Visual Studio версии 16.8 см. в статье Новые возможности Visual Studio 2019 версии 16.8.
Сопрограммы C++20 теперь поддерживаются в режиме
/std:c++latest(или/std:c++20начиная с Visual Studio 2019 версии 16.11) и заголовке<coroutine>.Теперь технология IntelliSense обеспечивает поддержку заголовков C++20
<concepts>и<ranges>, а также переименование и просмотр определений концепций.Наша версия библиотеки STL теперь поддерживает большинство диапазонов C++20.
Компилятор MSVC теперь поддерживает специальные функции-члены, условно являющиеся тривиальными.
C11 и C17 теперь поддерживаются при использовании
/std:c11и/std:c17переключателей.Внедрены также такие дополнительные улучшения STL, как полная поддержка
std::atomic_ref,std::midpoint,std::lerpиstd::execution::unseq, оптимизации дляstd::reverse_copyи многое другое.Обновленная версия CMake, поставляемая с Visual Studio, была обновлена до версии CMake 3.18.
Наши средства анализа кода теперь поддерживают SARIF 2.1 — отраслевой стандартный формат журнала статического анализа.
Отсутствующие средства сборки в проектах Linux теперь будут вызывать предупреждение на панели инструментов и четкое описание отсутствующих средств в списке ошибок.
Теперь можно выполнять отладку дампов ядра Linux в удаленной системе Linux или WSL непосредственно из Visual Studio.
Для создания комментариев в C++ Doxygen мы добавили дополнительные варианты стиля комментариев (
/*!и//!).Дополнительные объявления о vcpkg.
Включена поддержка компилятора для лямбда-выражений в невычисляемых контекстах.
Повышена производительность ссылки
/DEBUG:FULLпутем создания PDB-файлов в многопоточном режиме. Для некоторых крупных приложений и AAA-игр компоновка выполняется в 2–4 раза быстрее.Отладчик Visual Studio теперь поддерживает
char8_t.Включена поддержка проектов ARM64 с использованием clang-cl.
Включена поддержка встроенных объектов Intel AMX.
Новые возможности C++ в Visual Studio версии 16.7
Сводные сведения о новых возможностях и исправлениях ошибок в Visual Studio версии 16.7 см. в статье Новые возможности Visual Studio 2019 версии 16.7.
Теперь в рамках удаленной поддержки C++ поддерживается более широкий набор дистрибутивов и оболочек Linux, включая sh, csh, bash, tsch, ksh, zsh и dash. Можно переопределить возможность выбора оболочки для удаленного подключения, изменив свойство новой оболочки с помощью ConnectionManager.exe. Эта поддержка была протестирована в проектах Linux на основе MSBuild и проектах CMake, предназначенных для удаленной системы Linux или WSL.
Теперь вы можете использовать Ninja (систему сборки, которая очень быстро оценивает добавочные сборки) для оптимизации времени добавочной сборки для проектов Linux на основе MSBuild. Чтобы включить эту функцию, задайте параметру "Включить добавочную сборку" значение "С Ninja" на странице свойств "Общие". Система Ninja (ninja-build) должна быть установлена в удаленной системе Linux или WSL.
Реализованы новые функции стандартной библиотеки C++ 20. Подробный список см. в журнале изменений STL на GitHub.
Теперь можно изменять удаленные подключения SSH и задавать удаленные подключения SSH по умолчанию в диспетчере подключений. Это означает, что можно изменить существующее удаленное подключение (например, если изменился его IP-адрес) и задать используемые по умолчанию подключения в файлах CMakeSettings.json и launch.vs.json. Удаленные подключения SSH позволяют создавать и отлаживать проекты C++ в удаленной системе Linux непосредственно из Visual Studio.
Улучшенная поддержка IntelliSense для Clang в Windows (clang-cl) в Visual Studio. Теперь путь включения clang содержит библиотеки clang, мы улучшили отображение волнистых линий в редакторе при использовании библиотеки std, а также добавили поддержку языка C++2a в режиме clang.
Теперь вы можете использовать функцию подчеркивания ошибок в коде и просматривать другие предлагаемые быстрые исправления в проектах C++. Включите эту функцию в разделе Сервис > Параметры > Текстовый редактор > C/C++ > Экспериментальное. Установите для параметра Disable Experimental Code Linter значение false. Дополнительные сведения см. в Блоге группы разработчиков C++.
Мы добавили четыре новых правила анализа кода для включения дополнительных функций безопасности в C++: C26817, C26818, C26819 и C26820.
Мы добавили превосходную поддержку отладки проектов CMake в удаленных системах с помощью gdbserver.
Вы сможете легко находить ошибки повреждения памяти с помощью экспериментальной реализации AddressSanitizer для C++ в Visual Studio, которая теперь доступна для собственных проектов x64. Также поддерживаются среды выполнения отладки (
/MTd,/MDd,/LDd).Технология IntelliSense теперь обеспечивает базовую поддержку концепций, назначенных инициализаторов и некоторых других возможностей C++20.
Файлы с расширением
.ixxи.cppmтеперь распознаются как файлы C++ и обрабатываются как таковые с использованием маркера синтаксиса и технологии IntelliSense.
Новые возможности C++ в Visual Studio версии 16.6
Сводные сведения о новых возможностях и исправлениях ошибок в Visual Studio версии 16.6 см. в статье Новые возможности Visual Studio 2019 версии 16.6.
Улучшено создание комментариев Doxygen/XML: Автоматически создаются заглушки для комментариев Doxygen или XML при вводе
///или/**над функциями. Теперь они также отображаются в подсказках с краткими сведениями.Поддержка Ninja для CMake для Linux/WSL: используйте Ninja в качестве базового генератора при создании проектов CMake в WSL или удаленной системе. Ninja теперь является генератором по умолчанию при добавлении новой конфигурации Linux или WSL.
Шаблоны для удаленной отладки CMake: мы упростили шаблоны для отладки проектов CMake на удаленной системе Linux или WSL с использованием gdb.
Начальная поддержка концепций C++20: IntelliSense теперь распознает основные понятия C++20 и предлагает их в списке участников.
Новые возможности C++ в Visual Studio версии 16.5
Сводные сведения о новых возможностях и исправлениях ошибок в Visual Studio версии 16.5 см. в статье Новые возможности Visual Studio 2019 версии 16.5.
Поддержка модели автозавершения команд IntelliCode и членов-переменных. Разработчики C++ теперь могут обучать модели IntelliCode по собственным базам кода. Мы называем это моделью завершений команды, потому что вы извлекаете выгоду из практик вашей команды. Кроме того, мы улучшили предложения IntelliCode для переменных-членов.
Улучшения IntelliSense:
- IntelliSense теперь отображает более читаемые имена типов при работе со стандартной библиотекой.
- Мы добавили возможность переключения, будет ли клавиши Enter, пробел и Tab использоваться в качестве символов фиксации, а также возможность переключения, будет ли клавиша Tab использоваться для вставки фрагмента кода. Эти параметры расположены в разделе Сервис > Параметры > Текстовый редактор > C/C++ > Дополнительно > IntelliSense.
Работа с диспетчером подключений через командную строку. Теперь вы можете взаимодействовать с сохраненными удаленными подключениями через командную строку. Это удобно для таких задач, как подготовка нового компьютера для разработки или настройка Visual Studio в непрерывной интеграции.
Отладка и развертывание для WSL. Используйте встроенную поддержку WSL в Visual Studio, чтобы отделить систему сборки от системы удаленного развертывания. Теперь вы можете создавать собственные компоненты на WSL и развертывать артефакты сборки во второй удаленной системе для отладки. Этот рабочий процесс поддерживается как проектами CMake, так и проектами Linux на основе MSBuild.
Поддержка режима соответствия FIPS 140-2. Теперь Visual Studio поддерживает режим соответствия FIPS 140-2 при разработке приложений на C++, предназначенных для удаленной системы Linux.
Языковые службы для файлов языка CMake и более эффективное управление проектом CMake:
Оптимизирован процесс копирования исходных файлов для проектов CMake, нацеленных на удаленную систему Linux. Visual Studio теперь сохраняет файл отпечатка последнего набора источников, скопированного удаленно, и оптимизирует поведение в зависимости от количества измененных файлов.
Функции навигации по коду, такие как переход к определению и поиску всех ссылок, теперь поддерживаются для функций, переменных и целевых объектов в файлах скриптов CMake.
Добавляйте, удаляйте и переименовывайте исходные файлы и целевые объекты в проектах CMake из IDE без изменения скриптов CMake вручную. При добавлении или удалении файлов с помощью обозревателя решений Visual Studio автоматически отредактирует проект CMake. Кроме того, можно добавлять, удалять и переименовывать целевые объекты проекта из представления целевых объектов обозревателя решений.
Улучшения для проектов Linux. Проекты Visual Studio Linux получили более точную функцию IntelliSense. Это позволяет управлять синхронизацией удаленных заголовков отдельно для каждого проекта.
Новые возможности C++ в Visual Studio версии 16.4
Сводные сведения о новых возможностях и исправлениях ошибок в Visual Studio версии 16.4 см. в статье Новые возможности Visual Studio 2019 версии 16.4.
В Code Analysis реализована встроенная поддержка средства
Clang-Tidyдля проектов MSBuild и CMake при использовании набора инструментов MSVC или Clang. Проверки clang-tidy могут выполняться в рамках анализа кода в фоновом режиме, результаты появляются как предупреждения в редакторе (в виде подчёркиваний) и отображаются в списке ошибок.Теперь у проектов Visual Studio CMake есть обзорные страницы, которые помогут приступить к работе с кросс-платформенной разработкой. Эти страницы являются динамическими и помогают подключиться к системе Linux и добавить конфигурацию Linux или WSL в проект CMake.
Раскрывающееся меню запуска для проектов CMake теперь отображает последние использованные целевые объекты и может быть отфильтровано.
C++/CLI теперь поддерживает взаимодействие с .NET Core 3.1 и более поздними версиями в Windows.
Теперь можно включить ASan для проектов, скомпилированных с помощью MSVC в Windows, для инструментирования кода C++ в среде выполнения, чтобы обнаруживать ошибки памяти.
Обновления стандартной библиотеки C++ MSVC:
- C++17: Реализована универсальная точность
to_chars(), завершение P0067R5 Преобразования элементарных строк (charconv). Это завершает реализацию всех функций библиотеки в C++ 17 Standard. - C++20: реализована P1754R1: переименование концептов в standard_case. Чтобы включить эти возможности, используйте параметр компилятора
/std:c++latest(или/std:c++20начиная с Visual Studio 2019 версии 16.11). Этот параметр также можно задать на странице свойств проекта (Свойства конфигурации > C/C++ > Язык) с помощью свойства Стандарт языка C++.
- C++17: Реализована универсальная точность
Теперь доступна новая коллекция средств C++ Build Insights. Дополнительные сведения об объявлении см. в блоге группы разработчиков C++.
Новые возможности C++ в Visual Studio версии 16.3
Сводные сведения о новых возможностях и исправлениях ошибок в Visual Studio версии 16.3 см. в статье Новые возможности Visual Studio 2019 версии 16.3.
Теперь разработчики C++ могут переключать комментарии строк с помощью сочетания клавиш CTRL + K, CTRL + /.
Списки элементов IntelliSense теперь отфильтрованы на основе квалификаторов типа, например
const std::vectorтеперь отфильтровывает такие методы, какpush_back.Мы добавили эти возможности стандартной библиотеки C++20 (доступны в
/std:c++latestили/std:c++20начиная с Visual Studio 2019 версии 16.11):Новые проверки рекомендаций C++ Core Guidelines, включая новый набор правил "Enum Rules" и дополнительные правила для
const,enumи типов.Новая схема семантической раскраски по умолчанию, благодаря которой повышается удобство чтения кода. Также предусмотрена возможность настроить скрытие аргументов шаблона в окне стека вызовов и по умолчанию включена технология C++ IntelliCode.
Для настройки целевых объектов отладки и пользовательских задач с переменными среды можно использовать файлы CMakeSettings.json или CppProperties.json, а также новый тег "env" для отдельных целевых объектов и задач в файлах launch.vs.json и tasks.vs.json.
Теперь с помощью быстрого действия для отсутствующих пакетов vcpkg пользователи могут автоматически открывать консоль и устанавливать заданную по умолчанию версию пакета vcpkg.
Оптимизирована функция копирования удаленного заголовка для проектов Linux (CMake и MSBuild), которая теперь может выполняться параллельно.
Собственная поддержка WSL в Visual Studio теперь также включает поддержку параллельных сборок для проектов Linux на основе MSBuild.
Теперь пользователь может указать список локальных результатов сборки, которые будут развертываться в удаленной системе с проектами Makefile в Linux.
Описание параметров в редакторе параметров CMake теперь содержит больше контекстной информации и дополнительные ссылки на полезную документацию.
Базовая модель C++ для IntelliCode теперь включена по умолчанию. Чтобы изменить этот параметр, последовательно выберите Сервис>Параметры>IntelliCode.
Новые возможности C++ в Visual Studio версии 16.2
Сводные сведения о новых возможностях и исправлениях ошибок в Visual Studio версии 16.2 см. в статье Новые возможности Visual Studio 2019 версии 16.2.
Для локальных проектов CMake, настроенных с использованием Clang, анализ кода теперь выполняет проверки с помощью инструмента clang-tidy. Эти проверки отображаются как предупреждения в редакторе (волнистое подчеркивание) и в Списке ошибок в рамках анализа кода, выполняемого в фоновом режиме.
Обновлен заголовок
<charconv>для P0067R5 (элементарные преобразования строк) в C++17.- Добавлены перегрузки с плавающей точкой для
to_chars()с точностьюchars_format::fixedиchars_format::scientific(единственная часть, еще не реализованная, —chars_format::general precision). - Произведена оптимизация
chars_format::fixedкратчайшего.
- Добавлены перегрузки с плавающей точкой для
Добавлены следующие возможности стандартной библиотеки C++20:
- Доступно под
/std:c++latest(или/std:c++20, начиная с версии 16.11 Visual Studio 2019): - Доступно в
/std:c++17и/std:c++latest(или в/std:c++20, начиная с версии 16.11 Visual Studio 2019):-
P0600R1 —
[[nodiscard]]в библиотеке.
-
P0600R1 —
- Доступно безоговорочно:
- Доступно под
Windows SDK больше не является зависимостью для компонентов CMake для Windows и CMake для Linux.
Усовершенствования компоновщика C++ для значительного сокращения времени сборки итераций для самых крупных входных данных. Время выполнения
/DEBUG:FASTи/INCREMENTALв среднем вдвое быстрее, а/DEBUG:FULLтеперь в три-шесть раз быстрее.
Новые возможности C++ в Visual Studio версии 16.1
Сводные сведения о новых возможностях и исправлениях ошибок в Visual Studio версии 16.1 см. в статье Новые возможности Visual Studio 2019 версии 16.1.
Компилятор C++.
В компиляторе C++ были реализованы следующие возможности C++20, доступные в
/std:c++latest(или/std:c++20начиная с Visual Studio 2019 версии 16.11):- улучшена возможность поиска шаблонов функций с помощью зависящего от аргументов поиска выражений вызова функции с явно заданными аргументами шаблона (P0846R0);
- Инициализация с назначением (P0329R4), которая позволяет выбирать определенные члены в агрегатной инициализации, например, с использованием синтаксиса
Type t { .member = expr }.
Полностью переработана поддержка лямбда-функций и устранено большое количество давних проблем. При использовании
/std:c++20или/std:c++latestэто изменение включено по умолчанию. В языковом режиме/std:c++17и в режиме по умолчанию (/std:c++14) новое средство синтаксического анализа можно включить с помощью/Zc:lambdaв Visual Studio 2019 версии 16.9 или более поздней (ранее доступны в/experimental:newLambdaProcessorначиная с Visual Studio 2019 версии 16.3), например/std:c++17 /Zc:lambda.
Улучшения стандартной библиотеки C++
- Эти функции C++20 были добавлены в нашу реализацию стандартной библиотеки C++, доступной в разделе
/std:c++latest:-
starts_withиends_withдляbasic_stringиbasic_string_view. -
containsдля ассоциативных контейнеров; -
remove,remove_ifиuniqueдляlistиforward_listтеперь возвращаютsize_type; -
shift_leftиshift_rightдобавлены в<algorithm>.
-
IDE C++
IntelliCode для C++
IntelliCode теперь предоставляется в виде дополнительного компонента в комплекте Разработка для рабочего стола на C++. Подробные сведения см. в записи блога Improved C++ IntelliCode now Ships with Visual Studio 2019 (Улучшенный компонент IntelliCode для C++ теперь предоставляется с Visual Studio 2019).
IntelliCode использует обучение и контекст кода для вывода тех вариантов, которые вы чаще всего используете, в верхней части списка завершения. Он также часто устраняет необходимость прокручивать список. IntelliCode для C++ работает наиболее эффективно при использовании популярных библиотек, таких как стандартная библиотека.
Новые функции IntelliCode (пользовательские модели, поддержка C++ и вывод конфигураций EditorConfig) отключены по умолчанию. Чтобы включить их, откройте меню Средства > Параметры > IntelliCode > Общие. В этой версии IntelliCode повышен уровень точности и включена поддержка бесплатных функций. Дополнительные сведения см. в разделе Рекомендации по завершению кода на базе ИИ в C++ через IntelliCode.
Улучшение быстрой информации
- В информационной подсказке теперь учитывается семантическая подсветка в вашем редакторе. Он также имеет новую ссылку Поиск в Интернете, которая будет искать онлайн-документацию о конструкции кода при наведении курсора. Для кода, подчеркнутого волнистой красной линией, ссылка в подсказке позволяет выполнить поиск сведений об ошибке в Интернете. То есть вам не придется повторно вводить сообщение в браузере. Дополнительные сведения см. в разделе "Краткие сведения" в Visual Studio 2019: цветизация и поиск в Интернете.
Общие улучшения
Панель шаблонов может заполнять выпадающее меню на основе экземпляров шаблона в вашей кодовой базе.
Лампочки для отсутствующих директив
#include, которые могут быть установлены с помощью vcpkg, и автозавершение доступных пакетов для директивы CMakefind_package.Изменена страница свойств Общие для проектов C++. Некоторые параметры теперь отображаются на новой странице Дополнительно. На странице Дополнительно также находятся новые свойства для предпочитаемой архитектуры набора инструментов, отладочных библиотек, дополнительного номера версии набора инструментов MSVC и сборок Unity (джамбо).
Поддержка CMake
Версия CMake, которая поставляется с Visual Studio, обновлена до версии 3.14. В этой версии появилась встроенная поддержка генераторов MSBuild, предназначенных для проектов Visual Studio 2019, а также API интеграции интегрированной среды разработки на основе файлов.
Мы добавили улучшения в редактор параметров CMake, включая поддержку подсистемы Windows для Linux (WSL) и конфигураций из существующих кэшей, изменения корневых каталогов сборки и установки по умолчанию, а также поддержку переменных среды в конфигурациях CMake для Linux.
Завершения и краткие сведения для встроенных команд, переменных и свойств CMake упрощают редактирование файлов
CMakeLists.txt.Встроенная поддержка редактирования, сборки и отладки проектов CMake с Clang/LLVM. Подробные сведения см. в записи блога Clang/LLVM Support in Visual Studio (Поддержка Clang/LLVM в Visual Studio).
Linux и подсистема Windows для Linux.
Теперь поддерживается AddressSanitizer (ASan) в Linux и кроссплатформенных проектах CMake. Подробные сведения см. в записи блога AddressSanitizer (ASan) for the Linux Workload in Visual Studio 2019 (AddressSanitizer (ASan) для рабочей нагрузки Linux в Visual Studio 2019).
Мы интегрировали поддержку Visual Studio для работы с подсистемой Windows для Linux (WSL) при использовании C++. Теперь можно использовать локальную подсистему Windows для Linux (WSL) с C++ нативно в Visual Studio без дополнительной настройки или SSH-подключения. Подробные сведения см. в записи блога C++ with Visual Studio 2019 and Windows Subsystem for Linux (WSL) (C++ с Visual Studio 2019 и подсистемой Windows для Linux (WSL)).
Анализ кода
- Добавлены новые быстрые исправления для проверок неинициализированных переменных. В меню подсказок для соответствующих строк доступны предупреждения Code Analysis C6001: использование неинициализированной памяти
<variable>и C26494 VAR_USE_BEFORE_INIT. Они включены по умолчанию в наборе правил Microsoft Native Minimum и в наборе правил C++ Core Check соответственно. Для получения дополнительной информации см. Новые быстрые исправления анализа кода для предупреждений о неинициализированной памяти (C6001) и использовании переменных перед инициализацией (C26494).
Удаленные сборки
Теперь при разработке для Linux можно изолировать компьютеры удаленной сборки от компьютеров удаленной отладки (доступно для проектов MSBuild и CMake).
Улучшенное ведение журнала для удаленных подключений упрощает диагностику проблем, связанных с кроссплатформенной разработкой.
Новые возможности C++ в Visual Studio версии 16.0
Сводные сведения о новых возможностях и исправлениях ошибок в Visual Studio версии 16.0 см. в статье Новые возможности Visual Studio 2019 версии 16.0.
Компилятор C++.
Улучшенная поддержка функций C++17 и корректирующие исправления, а также экспериментальная поддержка функций C++20, таких как модули и сопрограммы. Подробные сведения см. в статье Улучшения соответствия C++ в Visual Studio 2019.
Параметр
/std:c++latestтеперь поддерживает функции C++20, которые не обязательно завершены, включая начальную поддержку оператора C++20<=>("космический корабль") для трехстороннего сравнения.Параметр компилятора C++
/Gmтеперь считается устаревшим. Рекомендуется отключить параметр/Gmв скриптах сборки, если он задан явно. Можно просто проигнорировать предупреждение об устаревании/Gm, так как оно не считается ошибкой при использовании режима "Обрабатывать предупреждения как ошибки" (/WX).В MSVC уже внедряются функции из проекта стандарта C++20 с флагом
/std:c++latest, поэтому/std:c++latestтеперь несовместим с/clr(все варианты),/ZWи/Gm. В Visual Studio 2019 используйте режим/std:c++17или/std:c++14при компиляции с параметром/clr,/ZWили/Gm(но обратите внимание на предыдущий пункт).Предкомпилированные заголовки больше не создаются по умолчанию для консоли C++ и настольных приложений.
Генерация кода, безопасность, диагностика и версирование
Доступен параметр /Qspectre для более эффективного анализа и устранения рисков, связанных с уязвимостью Spectre 1-го варианта (CVE-2017-5753). Дополнительные сведения см. в разделе Смягчение последствий Spectre в MSVC.
Улучшения стандартной библиотеки C++
Реализация дополнительных функций библиотек и корректирующих исправлений C++17 и C++20. Подробные сведения см. в статье Улучшения соответствия C++ в Visual Studio 2019.
Для улучшения читаемости кода в заголовках стандартной библиотеки C++ используется Clang-Format.
Так как Visual Studio теперь поддерживает функцию "Только мой код" для C++, стандартная библиотека больше не должна предоставлять настраиваемый механизм для
std::functionиstd::visit, чтобы обеспечить такой же результат. Удаление этого механизма будет почти незаметным для пользователя. Одно исключение: компилятор больше не будет сообщать о наличии проблем в строках 15732480 и 16707566 для<type_traits>или<variant>.
Повышение производительности и пропускной способности в компиляторе и стандартной библиотеке
Реализованы усовершенствования увеличения скорости процесса сборки, включая улучшения в обработке ввода-вывода файлов компоновщиком и время на стадии компоновки при объединении и создании типов PDB.
Добавлена базовая поддержка векторизации OpenMP SIMD. Вы можете включить ее с помощью нового параметра компилятора
/openmp:experimental. Эта опция позволяет при необходимости векторизовать циклы, аннотированные с#pragma omp simd. Векторизация не гарантируется, и для циклов с аннотацией, но без векторизации, будет выдано предупреждение. Предложения SIMD не поддерживаются: они игнорируются, и выводится предупреждение.Добавлен новый параметр встраивания командной строки
/Ob3, который представляет собой более эффективную версию/Ob2./O2(оптимизация двоичного файла для скорости) по-прежнему подразумевает/Ob2по умолчанию. Если вы считаете, что компилятор недостаточно агрессивно выполняет встраивание, попробуйте передать/O2 -Ob3.Добавлена поддержка встроенных функций Short Vector Math Library (SVML). Эти функции вычисляют 128-разрядные, 256-разрядные или 512-разрядные векторные эквиваленты. Мы добавили их для поддержки векторизации вручную циклов с вызовами функций математических библиотек и некоторых других операций, таких как целочисленное деление. См. раздел Руководство по встроенным функциям Intel с определениями поддерживаемых функций.
Новые и улучшенные оптимизации:
Свертывание констант и арифметические упрощения для выражений с использованием векторных встроенных инструкций SIMD как для чисел с плавающей запятой, так и для целых чисел.
Более мощный анализ для извлечения информации из потока управления (инструкции if/else/switch) для удаления ветвей, которые всегда истинны или ложны.
Оптимизированное развертывание memset для использования векторных инструкций SSE2.
Улучшено удаление ненужных копий структур и классов, особенно в C++ программах, использующих передачу по значению.
Улучшена оптимизация кода с использованием
memmove, например конструкцииstd::copyилиstd::vectorиstd::string.
Оптимизирована физическая структура стандартной библиотеки, чтобы избежать компиляции частей, не включенных напрямую. Это в два раза ускоряет сборку пустого файла, включающего только
<vector>. В результате этого изменения вам, возможно, потребуется добавить директивы#includeдля заголовков, которые ранее были включены косвенно. Например, если в коде используетсяstd::out_of_range, теперь в него нужно добавить#include <stdexcept>. В коде, использующем оператор вставки потока, возможно, потребуется добавить#include <ostream>. Преимущество заключается в том, что затраты на пропускную способность применяются только при компиляции тех единиц перевода, которые фактически используют компоненты<stdexcept>или<ostream>.if constexprтеперь более широко применяется в стандартной библиотеке для снижения нагрузки на пропускную способность и уменьшения размера кода в операциях копирования и преобразования (обращение и вращение), а также в библиотеке параллельных алгоритмов.Стандартная библиотека теперь внутренне использует
if constexprдля ускорения компиляции даже в режиме C++14.При динамическом обнаружении связывания во время выполнения для библиотеки параллельных алгоритмов для хранения массива указателей на функции больше не используется целая страница. Использование этой памяти только для чтения более не считается важным для безопасности.
Конструктор
std::threadбольше не ожидает запуска потока и не вставляет так много уровней вызова функции между базовой библиотекой C_beginthreadexи предоставляемым вызываемым объектом. Ранееstd::threadразмещал шесть функций между_beginthreadexи предоставляемым вызываемым объектом. Это число уменьшено до трех, два из которых - простоstd::invoke. Это изменение также позволяет устранить редкую ошибку, связанную со временем, когда конструкторstd::threadпереставал отвечать на запросы, если системное время было изменено в момент созданияstd::thread.Исправлен регресс производительности в
std::hash, вызванный внедрениемstd::hash<std::filesystem::path>.Для обеспечения корректности стандартная библиотека теперь использует деструкторы вместо блоков catch в нескольких случаях. Теперь изменения обеспечивают лучшее взаимодействие отладчика: исключения, которые вы выбрасываете через стандартную библиотеку в затронутых участках, теперь отображаются как выброшенные с их исходного места выброса, а не с места повторного выброса. Не все блоки catch стандартной библиотеки были устранены. Мы планируем сократить число блоков catch в последующих выпусках MSVC.
Проблема с неоптимальной работой генератора кода в
std::bitsetиз-за условного вызова в функцииnoexceptустранена. Для этого путь вызова был вынесен за скобки.std::listи семействоstd::unordered_*более широко внутренне используют итераторы без возможности отладки.Некоторые элементы
std::listбыли изменены так, чтобы при возможности оптимизировать процесс повторного использования узлов списков вместо их освобождения и повторного выделения. Например, если размерlist<int>уже равен 3, вызовassign(4, 1729)теперь перезапишет значенияintв первых трех узлах списков и выделит один новый узел списка со значением 1729.Все вызовы
erase(begin(), end())из стандартной библиотеки изменены наclear().В некоторых случаях
std::vectorтеперь более эффективно инициализирует и удаляет элементы.Усовершенствован
std::variantдля более дружественной работы с оптимизатором, что приводит к улучшению генерируемого кода. Встраивание кода теперь значительно улучшено сstd::visit.
IDE C++
Поддержка Live Share C++
Live Share теперь поддерживает C++, позволяя разработчикам, использующим Visual Studio или Visual Studio Code, сотрудничать в режиме реального времени. Дополнительные сведения см. в статье "Анонс Live Share для C++: Совместное использование и сотрудничество в реальном времени"
Шаблон IntelliSense
В строке шаблона теперь используется пользовательский интерфейс Окно просмотра, а не модальное окно, поддерживаются вложенные шаблоны и автоматически заполняются аргументы по умолчанию в Окне просмотра. Дополнительные сведения см. в статье Усовершенствования шаблона IntelliSense для Visual Studio 2019, предварительная версия 2. Раскрывающийся список Недавно использовавшиеся в строке шаблона позволяет быстро переключаться между предыдущими наборами аргументов шаблона.
Новый интерфейс начального окна
При запуске интегрированной среды разработки откроется новое начальное окно. Он предоставляет возможность открыть последние проекты, клонировать код из системы управления версиями, открыть локальный код как решение или папку, а также создать новый проект. Диалоговое окно создания проекта также теперь ориентировано на поиск и фильтрацию.
Новые имена для некоторых шаблонов проектов
Мы изменили несколько имен и описаний шаблонов проектов в соответствии с обновленным диалоговым окном создания проекта.
Различные улучшения производительности
Visual Studio 2019 включает в себя следующие возможности, которые помогут сделать процесс кодирования более простым и интуитивным:
- Быстрые исправления для:
- Добавить отсутствующий
#include -
NULLдоnullptr - Добавить недостающую точку с запятой.
- Устранение отсутствующего пространства имен или области видимости
- Замена неправильных операндов косвенного обращения (
*на&и&на*)
- Добавить отсутствующий
- Быстрая информация о блоке при наведении указателя на закрывающую скобку
- Просмотреть файл заголовка или кода
- Функция "Перейти к определению" для
#includeоткрывает файл
Дополнительные сведения см. в статье Улучшения производительности C++ в Visual Studio 2019, предварительная версия 2.
Поддержка CMake
Поддержка CMake 3.14
Visual Studio теперь может открыть существующие кэши CMake, созданные внешними средствами, например CMakeGUI или пользовательскими системами мета-сборки, или создать скрипты, которые сами вызывают cmake.exe.
Усовершенствование производительности IntelliSense.
Новый редактор параметров предоставляет альтернативу редактированию файла CMakeSettings.json вручную и частичное равенство с CMakeGUI.
Visual Studio помогает начать разработку на C++ с помощью CMake в Linux, определяя наличие совместимой версии CMake на компьютере Linux. Если она отсутствует, предлагается ее установить.
Несовместимые параметры в CMakeSettings, например несоответствие архитектур или несовместимые параметры генератора CMake, выделены волнистыми линиями в редакторе JSON и отображаются в списке ошибок.
Цепочка инструментов vcpkg автоматически обнаруживается и включается для проектов CMake, которые открыты в интегрированной среде разработки, после запуска
vcpkg integrate install. Это поведение можно отключить, указав пустой файл цепочки инструментов в CMakeSettings.Проекты CMake теперь включают отладку "Только мой код" по умолчанию.
Предупреждения статического анализа теперь обрабатываются в фоновом режиме и отображаются в редакторе для проектов CMake.
Более четкие сообщения о начале и конце сборки и конфигурации для проектов CMake, а также поддержка пользовательского интерфейса отображения хода сборки в Visual Studio. Кроме того, теперь есть параметр детализации CMake в разделе Инструменты > Параметры для настройки уровня детализации сообщений о сборке и конфигурации CMake в окне вывода.
Параметр
cmakeToolchainтеперь поддерживается в CMakeSettings.json для указания цепочек инструментов без изменения командной строки CMake вручную.Новое сочетание клавиш для меню Собрать все — CTRL+SHIFT+B.
Интеграция IncrediBuild
IncrediBuild включается в виде дополнительного компонента в рабочую среду Разработка приложений для настольных систем на C++. Монитор сборки IncrediBuild полностью интегрирован в IDE Visual Studio. Подробные сведения см. в записи блога Visualize your build with IncrediBuild’s Build Monitor and Visual Studio 2019 (Визуализация сборки с помощью монитора сборки IncrediBuild и Visual Studio 2019).
Отладка
Для приложений на C++, работающих в Windows, PDB-файлы теперь загружаются в отдельном 64-разрядном процессе. Это изменение устраняет ряд сбоев, вызванных нехваткой памяти для отладчика. Например, были возможны сбои при отладке приложений, содержащих большое количество модулей и PDB-файлов.
Поиск включен в окнах наблюдений, автопеременных и локальных переменных.
Разработка настольных приложений для Windows на C++
Следующие мастера C++, ATL и MFC больше не доступны:
- Мастер компонентов ATL COM+ 1.0
- Мастер компонентов ATL Active Server Pages
- Мастер поставщика OLE DB в ATL
- Мастер страницы свойств ATL
- Мастер потребителя ATL OLE DB
- Потребитель ODBC MFC
- Класс MFC из элемента управления ActiveX
- Класс MFC из TypeLib.
Пример кода для этих технологий архивируется в Microsoft Learn и репозитории VCSamples GitHub.
Пакет средств разработки программного обеспечения (SDK) Windows 8.1 больше не доступен в установщике Visual Studio. Обновите проекты C++ до последней версии Windows SDK. Если у вас есть жесткая зависимость от версии 8.1, ее можно скачать из архива Windows SDK.
Windows XP больше нельзя выбрать в качестве целевой платформы для последнего набора инструментов C++. Поддержка XP в библиотеках и компиляторе уровня MSVC от VS 2017 все еще поддерживается и может быть установлена через раздел "Отдельные компоненты".
В нашей документации настоятельно не рекомендуется использовать модули слияния для развертывания среды выполнения Visual C++. В этом выпуске мы предпринимаем дополнительные шаги, чтобы отметить наши MSM как устаревшие. Возможно, следует перенести центральное развертывание VCRuntime с MSM на распространяемый пакет.
Разработка мобильных приложений на C++ (для iOS и Android)
Опыт использования C++ на Android теперь по умолчанию использует Android SDK 25 и Android NDK 16b.
Набор средств платформы Clang/C2
Экспериментальный компонент Clang/C2 удален. Для обеспечения полного соответствия стандартам C++ используйте набор инструментов MSVC с параметрами /permissive- и /std:c++17 или же цепочку инструментов Clang/LLVM для Windows.
Анализ кода
Анализ кода теперь выполняется автоматически в фоновом режиме. Предупреждения отображаются зелеными волнистыми линиями в редакторе при вводе. Дополнительные сведения см. в разделе Анализа кода в редакторе в Visual Studio 2019, предварительная версия 2.
Новые экспериментальные правила ConcurrencyCheck для хорошо известных типов стандартной библиотеки из заголовка
<mutex>. Дополнительные сведения см. в разделе Параллельный анализ кода в Visual Studio 2019.Обновленная частичная реализация инструмента проверки профиля времени существования для обнаружения висячих указателей и ссылок. Дополнительные сведения см. в разделе Обновление профиля жизненного цикла в предварительной версии 2 Visual Studio 2019.
Дополнительные проверки сопрограмм, включая C26138, C26810, C26811, и экспериментальное правило C26800. Дополнительные сведения см. в разделе Новые проверки анализа кода в Visual Studio 2019: использование после перемещения и сопрограмма.
Модульное тестирование
Шаблон управляемого тестового проекта C++ больше не доступен. Вы можете продолжить использование платформы управляемых тестов C++ в существующих проектах. Но для новых модульных тестов мы рекомендуем использовать собственные тестовые платформы, для которых Visual Studio предоставляет шаблоны (MSTest, Google Test), или шаблон управляемого тестового проекта C#.