Novedades de C++ en Visual Studio 2022

Visual Studio 2022 incluye numerosas actualizaciones y revisiones del entorno de Microsoft C++. Hemos agregado características, y hemos corregido numerosos errores y problemas en el compilador y las herramientas. El IDE de Visual Studio ofrece mejoras significativas en el rendimiento y la productividad, y ahora se ejecuta de forma nativa como una aplicación de 64 bits. Para obtener más información sobre todas las novedades de Visual Studio, visite Novedades de Visual Studio 2022. Para obtener información sobre las novedades en la documentación de C++, consulte Documentación de Microsoft C++: novedades.

Novedades de C++ en Visual Studio, versión 17.0

Para obtener un resumen de las nuevas características y correcciones de errores de Visual Studio, consulte Novedades de Visual Studio 2022, versión 17.0.

  • El IDE de Visual Studio, devenv.exe , ahora es una aplicación nativa de 64 bits.

  • El conjunto de herramientas de MSVC ahora tiene como valor predeterminado el hash de origen SHA-256 en los registros de depuración. Anteriormente, en el conjunto de herramientas se usaba MD5 de forma predeterminada para el hash de origen.

  • Las herramientas de compilación v143 ahora están disponibles mediante el instalador de Visual Studio y en las herramientas de compilación independientes.

Recarga activa para C++ nativo

  • Recarga activa para C++ permite realizar numerosos tipos de modificaciones de código en la aplicación en ejecución y aplicarlas sin necesidad de pausar la ejecución de la aplicación con algo parecido a un punto de interrupción.

En Visual Studio 2022, al iniciar la aplicación en el depurador, puede usar el botón Recarga activa para modificar la aplicación mientras se está ejecutando. Esta experiencia cuenta con la tecnología nativa Editar y continuar. Para obtener más información sobre las ediciones compatibles, consulte Editar y continuar (C++).

  • Recarga activa admite proyectos de CMake y OpenFolder.

Compatibilidad con WSL2

  • Ahora puede compilar y depurar de forma nativa en WSL2 sin establecer una conexión SSH. Se admiten proyectos de CMake multiplataforma y proyectos de Linux basados en MSBuild.

Compatibilidad mejorada con CMake

  • Hemos actualizado la versión de CMake que se incluye con Visual Studio a la versión 3.21. Para obtener más información sobre lo que está disponible en esta versión, consulte las notas de la versión 3.21 de CMake.

  • Las páginas de información general de CMake se han actualizado para admitir CMakePresets.json .

  • Ahora puede configurar y compilar los proyectos de CMake con CMake 3.21 y CMakePresets.json v3.

  • Visual Studio ahora admite la opción buildPresets.targets en CMakePresets.json . Esta opción le permite crear un subconjunto de destinos en el proyecto de CMake.

  • El menú Proyecto en los proyectos de CMake se ha simplificado y expone opciones para eliminar la caché y volver a configurarla y para ver la caché.

  • Se ha implementado la opción del compilador /scanDependencies para enumerar dependencias de módulo de C++20 para proyectos de CMake, como se describe en /scanDependencies. Se trata de un paso hacia la compatibilidad con la creación de proyectos basados en módulos con CMake y estamos trabajando para completar esta compatibilidad en versiones posteriores.

Mejoras de la biblioteca estándar

Aquí se destacan mejoras seleccionadas de la biblioteca estándar (STL). Para obtener una lista completa de nuevas funcionalidades, cambios, correcciones de errores y mejoras de rendimiento, consulte el registro de cambios del equipo de STL.

  • Se han agregado visualizadores de depuración para mejorar la forma en que se muestran los siguientes tipos: source_location, bind_front(), u8string (y sus iteradores), default_sentinel_t, unreachable_sentinel_t, ranges::empty_view, ranges::single_view, ranges::iota_view (y su iterador o centinela), ranges::ref_view, thread, thread::id, jthread y filesystem::path.
  • Se ha agregado [[nodiscard]] a la familia de funciones stoi() en <string> y a varias funciones en <locale>, como las funciones miembro collate y has_facet(), y las familias isalnum() y tolower().
  • P0980R1 Realizado constexpr en VS 2019 16.10. Ahora también se admite para Clang.
  • P1004R2 Realizado constexpr en VS 2019 16.10. Ahora también se admite para Clang.

Características destacadas de C++23

  • P1048R1 Se ha agregado , un nuevo rasgo para la biblioteca estándar de C++, que detecta si un tipo es una enumeración con ámbito.
  • P1132R7 ,inout_ptr()
  • P1679R3 Para basic_string ybasic_string_view
  • P1682R3 para enumeraciones
  • P2162R2 Permitir la herencia de
  • P2166R1 Prohíba la construcción y a partir de basic_string_viewnullptr . Se trata de un cambio que afecta directamente al código fuente. Un código que antes no tenía un comportamiento definido en el tiempo de ejecución, ahora se rechazará con errores del compilador.
  • P2186R2 Se ha quitado la compatibilidad con la recolección de elementos no utilizados. Esto quita declare_reachable, undeclare_reachable, declare_no_pointers, undeclare_no_pointers y get_pointer_safety. Anteriormente, estas funciones no tenían ningún efecto.

Mejoras destacadas en el rendimiento

  • <format> ahora detecta cuándo se escribe en back_insert_iterator para un elemento basic_string o uno vector y hace llamadas más rápidas a insert() en la parte end() del contenedor.
  • Se ha mejorado el rendimiento de std::find() y std::count() para vector<bool> 19 y 26 veces respectivamente (no en porcentaje).
  • Se ha mejorado el rendimiento de std::count() para vector<bool>.
  • std::byte ahora tiene el mismo rendimiento que unsigned char en reverse() y variant::swap().

Compatibilidad con Clang y LLVM

  • Las herramientas de LLVM que se incluyen con Visual Studio se han actualizado a LLVM 12. Para obtener más información, consulte las notas de versión de LLVM.

  • La compatibilidad con Clang-cl se actualizó a LLVM 12.

  • Ahora puede depurar procesos que se ejecutan en un sistema remoto desde Visual Studio con LLDB.

C++ AMP en desuso

  • Los encabezados de AMP de C++ están en desuso. Incluir <amp.h> en un proyecto de C++ genera errores de compilación. Para silenciar los errores, defina _SILENCE_AMP_DEPRECATION_WARNINGS. Para obtener más información, consulte nuestros vínculos de desuso de AMP.

Mejoras de IntelliSense

  • Hemos realizado mejoras en IntelliSense de C++ al proporcionar resaltado de navegación y sintaxis para tipos de módulos importados y unidades de encabezado. IntelliSense es un área activa de inversión para nosotros. Ayúdenos a mejorar: comparta sus comentarios sobre los desarrolladores Community mediante Ayuda paraenviar comentarios.

  • Se ha mejorado el rendimiento de IntelliSense de C++ mediante la optimización del uso de encabezados almacenados en caché y el acceso a la base de datos de símbolos, lo que proporciona tiempos de carga mejorados para acceder al código.

  • El linter de código de IntelliSense para C++ está ahora activado de manera predeterminada, lo que proporciona sugerencias instantáneas a medida que escribe y corrige sugerencias para defectos de código comunes.

  • IntelliSense de C++ para proyectos de CMake ahora funciona cuando se usa un valor preestablecido con un nombre para mostrar.

Actualizaciones de cargas de trabajo de C++

  • Se ha actualizado a NDK r21 LTS en la carga de trabajo Desarrollo móvil con C++ .

  • Ahora la carga de trabajo Desarrollo de juegos con C++ instala la versión más reciente del motor Unreal con compatibilidad con Visual Studio 2022.

Mejoras en el análisis de código

  • El análisis de código ahora exige que se deben comprobar los valores devueltos de las funciones anotadas con _Check_return_ o _Must_inspect_result_.

  • Hemos mejorado la detección de desreferencia de punteros nulos en nuestras herramientas de análisis de código.

  • Se ha agregado compatibilidad con gsl::not_null para analizar código.

  • Compatibilidad con Libfuzzer en la opción del compilador /fsanitize=fuzzer .

Notas de las versiones anteriores

Las notas de las versiones anteriores de C++ también están disponibles. Para obtener información sobre las novedades de C++ en Visual Studio 2019, vea Novedades de C++ en Visual Studio 2019. Para obtener información sobre las novedades de C++ en Visual Studio 2017, vea Novedades de C++ en Visual Studio 2017. Para obtener información sobre las novedades de versiones anteriores, consulte Visual C++ What's New 2003 through 2015 (Novedades de 2003 a 2015).

Problemas conocidos

IntelliSense para C++

Para obtener más información sobre otras incidencias abiertas y las soluciones alternativas disponibles para C++ en Visual Studio 2022, consulte la lista de incidencias de Developer Community para C++.

Comentarios y sugerencias

Estaremos encantados de ayudarle. Puede notificar un problema o sugerir una característica mediante el icono Enviar comentarios en la esquina superior derecha del instalador o el IDE de Visual Studio, o bien desde Ayuda para enviar comentarios. Puede realizar un seguimiento de sus incidencias en Developer Community de Visual Studio, donde puede agregar comentarios o encontrar respuestas. También puede obtener ayuda gratuita para la instalación a través de nuestro servicio de soporte técnico de chat en directo.

Blogs

Aproveche la información y las recomendaciones disponibles en los blogs para desarrolladores de Microsoft. Le mantendrán al día de todas las versiones nuevas. En los blogs se incluyen publicaciones con mucha información sobre una amplia gama de características. El blog del equipo de C++ y el blog de Visual Studio le parecerán de especial interés.