Novedades de C++ en Visual Studio 2022

Visual Studio 2022 aporta muchas actualizaciones y correcciones al compilador y las herramientas de Microsoft C++. 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.

Novedades de C++ en Visual Studio versión 17.9

Brevemente, algunas de las nuevas características son:

  • #include diagnostics, que proporciona un análisis detallado de las #include directivas. Para activar esta característica, haga clic con el botón derecho en una #include directiva y elija #include directivas>Activar #include diagnóstico de directivas. Encima de cada uno #include es el número de veces que el código hace referencia a ese #include archivo. Haga clic en el vínculo de referencia para ir a donde el código usa algo de ese archivo de encabezado. Para ver el tiempo de compilación de #include las directivas, ejecute Build Ideas; para ello, vaya a Build>Run Build Ideas on Solution Build (Compilar compilación Ideas en compilación de>soluciones).

    Screenshot of #include diagnostics

    Encima de # include es un vínculo **reference** y una serie de las referencias a este archivo #include (en este caso 1). El tiempo de compilación también aparece (en este caso, menos de 1/2 segundos).

  • Visualización del diseño de memoria, que muestra cómo se organiza la memoria para las clases, estructuras y uniones. Mantenga el puntero sobre un tipo y elija el vínculo Diseño de memoria en la información rápida para abrir una ventana dedicada que muestra el diseño de memoria del tipo seleccionado. Al mantener el puntero sobre tipos de datos individuales dentro de esta ventana se proporciona información detallada sobre su tamaño y desplazamiento dentro del tipo.

    Screenshot of the memory layout window

    La ventana de diseño de memoria muestra el contenido de la clase Snake. Muestra los desplazamientos de memoria de los distintos campos de la clase, como las clases Point para la ubicación de la cabeza y el cuerpo, la puntuación, etc.

  • Ahora puede especificar su propio ejecutable de CMake personalizado. Esta característica es útil si desea usar una versión específica de CMake que no se incluye con Visual Studio. Vaya a Opciones de herramientas> y seleccione CMake>General. Seleccione Habilitar ejecutable de CMake personalizado y especifique la ruta de acceso del directorio del ejecutable de CMake.

    Screenshot of the CMake options dialog

    El cuadro de diálogo opciones de CMake con la opción "Habilitar ejecutable de CMake personalizado" y el campo "Directorio ejecutable de CMake" resaltado.

  • IntelliSense mejorado para proyectos de unreal Engine.
  • Compatibilidad mejorada con C++23: std::format y std::spanformattable, range_formatformat_kind, y set_debug_format() como parte de P2286R8 Intervalos<mdspan> de formato por P0009R18 y los cambios de redacción posteriores que se aplicaron al estándar de C++23. Además, format() puede dar formato a punteros por P2510R3.

Para obtener un resumen de las actualizaciones de back-end de C++, consulte Actualizaciones de back-end de MSVC desde visual Studio 2022, versión 17.3.

Para obtener un resumen de las nuevas características del IDE de Visual Studio 17.9, vea Notas de la versión 17.9 de Visual Studio 2022.

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

Brevemente, algunas de las nuevas características son:

  • Diagnóstico estructurado de C++ en la ventana de salida y una nueva ventana de detalles del problema que proporciona más información sobre el error. Para obtener más información, consulte Ventana de detalles de problemas y resultados de SARIF estructurados.
  • Una característica que le permite visualizar el tamaño y la alineación de las clases, estructuras, uniones, tipos base o enumeraciones incluso antes de compilar el código. Mantenga el puntero sobre el identificador y una información rápida mostrará la información de tamaño y alineación.
  • Característica que sugiere cuándo marcar funciones miembro const porque no modifican el estado del objeto. Mantenga el puntero sobre una función miembro y haga clic en el icono de la bombilla para marcar la función como const.
  • Visual Studio ahora le pide que marque las funciones globales como estáticas a través del icono de destornillador que aparecerá junto al nombre de la función. Haga clic en el icono del destornillador para marcar la función como estática.
  • Las directivas #include sin usar se atenúan en el editor. Puede mantener el puntero sobre un include atenuado y usar el menú de bombilla para quitar ese include o todos los include no utilizados. También puede agregar #include directivas para las entidades que se incluyen indirectamente a través de otros encabezados. Para obtener más información, consulte Limpieza de directivas include de C/C++ en Visual Studio.
  • Más compatibilidad con Unreal Engine:
    • Unreal Engine Test Adapter permite detectar, ejecutar, administrar y depurar las pruebas de Unreal Engine sin salir del IDE de Visual Studio.
    • Con fragmentos de código de Unreal Engine, puede encontrar construcciones comunes de Unreal Engine como fragmentos de código en la lista de miembros.
    • Build Insights ahora está integrada con Visual Studio 2022 y funciona con proyectos de MSBuild y CMake mediante MSVC. Ahora puede ver información adicional sobre la compilación de una función, como el tiempo que tarda en compilarse y el número de ForceInlines.
  • La compatibilidad con pruebas unitarias remotas de Linux ahora le permite ejecutar las pruebas de CTest y GTest en las máquinas Linux remotas desde el Explorador de pruebas de Visual Studio, al igual que las pruebas locales.

Para obtener un resumen más completo de las nuevas características de C++ en Visual Studio 17.8, vea Novedades para desarrolladores de C++ en Visual Studio 2022 17.8.

Para obtener un resumen de las nuevas funciones del IDE de Visual Studio 17.8, consulte las notas de la versión 17.8 de Visual Studio 2022.

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

Para obtener un resumen de las nuevas características de C++ en Visual Studio 17.7, vea Novedades para desarrolladores de C++ en Visual Studio 2022 17.7.

Brevemente, algunas de las nuevas características son:

  • Sesiones de depuración más rápidas y tiempos de carga de proyectos más rápidos
  • Visualización paso a paso de la macroexpansión
  • Descarga con un solo clic para Subsistema de Windows para Linux (WSL)
  • Compatibilidad mejorada con comentarios de Doxygen
  • Información de compilación de C++ para el desarrollo de juegos
  • Se ha agregado /std:clatest para el compilador C.
  • Mejoras de proyectos de Unreal Engine, como intelliSense y colorización de sintaxis más rápidas, la capacidad de encontrar todas las referencias de Unreal Engine Blueprint, etc.

Para obtener un resumen de las nuevas características de C++ específicas para el desarrollo de juegos, consulta Liberar la potencia de Visual Studio 2022 para el desarrollo de juegos de C++

Para obtener un resumen de las nuevas funciones del IDE de Visual Studio 17.7, consulte las notas de la versión 17.7 de Visual Studio 2022.

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

Para obtener un resumen de las nuevas características de C++ en Visual Studio 17.6, vea Novedades para desarrolladores de C++ en Visual Studio 2022 17.6.

Brevemente, algunas de las nuevas características son: depuración de scripts de CMake, compatibilidad integrada con el lenguaje de sombreado de alto nivel (HLSL), un visor de registros de unreal Engine, compatibilidad inicial con C++20 en proyectos de C++/CLI, VCPKG ahora se agrega de forma predeterminada y algunas características de biblioteca estándar de C++23 para rangos. Para ver una lista completa de las nuevas características agregadas a la biblioteca estándar, consulte el registro de cambiosde STL.

Si desea un resumen de las nuevas funciones del IDE de Visual Studio 17.6, consulte las notas de la versión 17.6 de Visual Studio 2022.

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

Para obtener un resumen de las nuevas características de C++ en Visual Studio en la versión 17.5, vea Novedades para desarrolladores de C++ en Visual Studio 2022 17.5. Para obtener un resumen de las nuevas características y correcciones de errores en la versión 17.5 de Visual Studio, vea Novedades de la versión 17.5 de Visual Studio 2022.

  • std::move, std::forward, std::move_if_noexcept y std::forward_like ahora no producen llamadas de función en código generado, incluso en modo de depuración. Este cambio evita las conversiones con nombre que provocan una sobrecarga innecesaria en las compilaciones de depuración. Se requiere /permissive- (o una opción que lo implique, como /std:c++20 o std:c++latest).

  • Se ha agregado [[msvc::intrinsic]] para admitir el elemento anterior. Puede aplicar este atributo a las funciones no recursivas que constan de un único reparto y que sólo toman un parámetro.

  • Se ha agregado compatibilidad con la consola de Linux en el terminal integrado que permite la E/S del terminal.

  • Se ha agregado compatibilidad experimental inicial con primitivos atómicos C11 (<stdatomic.h>). Puede habilitar esta característica experimental con la opción /experimental:c11atomics en el modo /std:c11 o posterior.

  • Se ha agregado un nuevo conjunto de comprobaciones experimentales de alta confianza al Comprobador de duración para reducir el ruido.

  • Una nueva característica en versión preliminar, el Explorador de archivos remotos, le permite ver el directorio de archivos en las máquinas remotas dentro de VS, así como cargar y descargar archivos en él.

  • Se ha cambiado el control de versiones de los ejecutables de CMake enviados con Visual Studio para que coincidan con las versiones de Kitware.

  • Se ha agregado compatibilidad con Recarga activa a la plantilla Proyecto de CMake.

  • Ir a definición para C++ ahora usa un indicador más sutil de la operación que tarda más tiempo, reemplazando el cuadro de diálogo modal de versiones anteriores.

  • Se inició el lanzamiento de un experimento que proporciona resultados inteligentes adicionales en la lista de miembros y autocompletado de C++. Esta funcionalidad se conocía anteriormente como IntelliSense predictivo, pero ahora usa un nuevo método de presentación.

  • Ahora se envía un conjunto de herramientas nativo de Arm64 Clang con nuestra carga de trabajo de LLVM, lo que permite la compilación nativa en máquinas Arm64.

  • Se ha agregado la localización a Image Watch Extension (esta extensión está disponible en Marketplace y no se agrupa por el Instalador de Visual Studio).

  • Se ha agregado compatibilidad para abrir una ventana de Terminal en el contenedor para desarrolladores que se está ejecutando actualmente.

  • Se han realizado varias mejoras en la expansión de macros de IntelliSense. En particular, hemos habilitado la expansión recursiva en más contextos y hemos agregado opciones al elemento emergente para copiar la expansión en el Portapapeles o expandir la macro insertada.

  • Ahora se admite la supervisión simultánea en el monitor de serie. La supervisión simultánea permite supervisar varios puertos al mismo tiempo, en paralelo. Presione el botón más para abrir otro monitor de serie y empezar.

  • Ahora puede ver las propiedades de las clases base modificadas en un recurso de Unreal Blueprint sin salir de Visual Studio. Haga doble clic en una referencia de Blueprint para una clase o propiedad de C++ con el fin de abrir el Inspector de recursos de UE en Visual Studio.

  • Se ha habilitado la ejecución de DevContainers en una máquina Linux remota.

  • Se ha habilitado la selección de varios destinos para compilar en la vista Destino de CMake.

  • Se ha agregado compatibilidad con CMakePresets.json, versión 5. Consulte la documentación de CMake para obtener información sobre las nuevas características.

  • Se ha habilitado el Explorador de pruebas para compilar y probar varios destinos de CMake en paralelo.

  • Se ha agregado la opción "Abrir contenedor en terminal" a Contenedores de desarrollo.

  • Características de biblioteca estándar implementadas:

    • P2508R1basic_format_string, format_string, wformat_string
    • P2322R6ranges::fold_left, ranges::fold_right, etc.
    • P2321R2views::zip (no incluye zip_transform, adjacent y adjacent_transform)

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

Para obtener un resumen de las nuevas características y correcciones de errores en Visual Studio en la versión 17.4, vea Notas de la versión 17.4 de Visual Studio 2022 y Novedades para desarrolladores de C++ en Visual Studio 2022 17.4.

  • Se han mejorado los mensajes de error del compilador para proporcionar información más correcta y útil, especialmente para los conceptos.

  • Se ha agregado la opción MSVC experimental /experimental:log<directory> a la salida diagnósticos de SARIF estructurados al directorio especificado.

  • Se ha agregado compatibilidad con los atributos C23 a IntelliSense y se ha continuado el progreso en la compatibilidad con los módulos de C++20.

  • Se ha mejorado el rendimiento de la indexación al abrir una nueva solución. Los proyectos grandes podrían ver una mejora del 20 al 35 % con respecto a la versión 17.3.

  • Se ha mejorado la optimización del valor devuelto con nombre (NRVO):

    • Se ha habilitado NRVO para casos que implican el control de excepciones o bucles.
    • NRVO se habilita incluso en /Od si el usuario pasa la opción /Zc:nrvo, /std:c++20 o posterior o /permissive-.
    • Ahora puede deshabilitar NRVO con la opción /Zc:nrvo-.
  • Se ha actualizado la versión de LLVM incluida con Visual Studio a la versión 15.0.1. Para obtener más información sobre lo que está disponible, consulte las notas de la versión de LLVM y Clang.

  • Se ha agregado compatibilidad con Visual Studio para los artefactos vcpkg con proyectos de CMake. Para los proyectos que incluyen un manifiesto vcpkg, el entorno se activa automáticamente al abrir el proyecto. Puede obtener más información sobre esta característica en la entrada de blog sobre la activación del entorno vcpkg en Visual Studio.

  • Ahora puede usar Contenedores de desarrollo para los proyectos de C++. Puede obtener más información sobre esta característica en nuestra entrada de blog Contenedores de desarrollo para C++.

  • IntelliSense respeta ahora el orden de los encabezados preincluidos cuando uno de ellos es un PCH. Anteriormente, cuando se usaba un PCH a través de /Yu y se forzaba su inclusión a través de /FI, IntelliSense siempre lo procesaba primero, antes que cualquier otro encabezado incluido a través de /FI. Este comportamiento no coincidía con el comportamiento de compilación. Con este cambio, los encabezados /FI se procesan en el orden en que se especifican.

  • Se han quitado los prefijos internos de los nombres de CTest en el Explorador de pruebas.

  • Se ha actualizado la versión de CMake incluida con Visual Studio a la versión 3.24.1. Vea las notas de la versión de CMake para obtener detalles sobre lo que está disponible.

  • Actualización de Android SDK:

    • Se han quitado los scripts de Ant, por lo que los usuarios ya no ven plantillas basadas en Ant en el cuadro de diálogo Nuevo proyecto. Para obtener ayuda para migrar desde las plantillas de Ant a las plantillas de Gradle, consulte Migración de compilaciones desde Apache Ant.
    • Se ha agregado compatibilidad para la compilación con NDK 23 y 24.
    • Se ha actualizado el componente NDK a la versión 23 de LTS.
  • Se han agregado implementaciones vectorizadas de ranges::min_element(), ranges::max_element() y ranges::minmax_element().

  • Seguimos realizando un seguimiento de los últimos desarrollos en la estandarización de C++. La compatibilidad con estas características de C++23 está disponible mediante la inclusión de /std:c++latest en las opciones del compilador:

    • P2302R4ranges::contains, ranges::contains_subrange

    • P2499R0string_view El constructor de rango debería ser explicit

    • P0849R8auto(x): decay-copy en el lenguaje

      (La parte del compilador aún no está implementada. La parte de biblioteca se implementó en modo C++20 cuando se implementó inicialmente la compatibilidad con rangos).

    • P0881R7<stacktrace>

    • P2301R1 Agregue un alias pmr para std::stacktrace

    • P1328R1constexpr type_info::operator==()

    • P2440R1ranges::iota, ranges::shift_left, ranges::shift_right

    • P2441R2views::join_with

  • Se ha agregado una opción "Navegación después de crear la declaración o definición" para permitirle elegir el comportamiento de navegación de la característica Crear declaración o definición. Puede seleccionar entre ver el código sin salir (el valor predeterminado), abrir el documento o sin navegación.

  • Las compilaciones de Arm64 de Visual Studio ahora agrupan las versiones de Arm64 de CMake y Ninja.

  • Se ha agregado compatibilidad con los valores preestablecidos de CMake de la versión 4. Vea las notas de la versión de CMake para obtener detalles sobre lo que está disponible.

  • Las conexiones del sistema remoto que usan el Administrador de conexiones ahora admiten SSH ProxyJump. ProxyJump se usa para acceder a un host SSH a través de otro host SSH (por ejemplo, para acceder a un host detrás de un firewall).

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

Para obtener un resumen de las nuevas funciones y correcciones de errores de Visual Studio en la versión 17.3, consulte Notas de la versión Visual Studio 2022 versión 17.3 y mejoras de C++.

  • La cadena de herramientas Arm64EC ya no está marcada como experimental y está lista para su uso en producción.

  • El terminal de Visual Studio ahora se puede usar como cliente SSH con las conexiones SSH almacenadas. Con las herramientas de C++ para Linux instaladas, abra la ventana de herramientas Terminal. La lista desplegable Terminal se rellena con las conexiones almacenadas. Al seleccionar una conexión, se abre una nueva ventana terminal dentro de Visual Studio que muestra un pseudoterminal en el sistema remoto. Se admiten los caracteres de control, los colores y el reconocimiento posicional del cursor.

  • Visual Studio ahora puede agregar plantillas de clase de Unreal Engine para los proyectos de UE. Para probar esta característica, asegúrese de que Compatibilidad del IDE con Unreal Engine está seleccionado en la carga de trabajo Desarrollo de juegos con C++ dentro del Instalador de Visual Studio. Al trabajar en un proyecto de UE, haga clic con el botón derecho en el proyecto o en una carpeta o filtro y seleccione Agregar>Clase de UE.

  • Ir a definición ahora recordará la firma anterior y navegará en consecuencia cuando no esté disponible una coincidencia mejor (por ejemplo, después de cambiar manualmente la firma de uno de los pares). Se ha mejorado la capacidad de respuesta de Ir a todos. Anteriormente, los resultados aparecían después de dejar de escribir. En la nueva experiencia, los resultados se muestran a medida que escriba.

  • En contextos que requieren la compleción del tipo enum (por ejemplo, asignaciones a variables enum, etiquetas case, tipo enum que vuelve, etc.), la lista de compleción automática ahora se filtra solo a los enumeradores coincidentes y las construcciones relacionadas.

  • Se ha agregado compatibilidad con NuGet PackageReference para proyectos de MSBuild de C++/CLI destinados a .NET Core. Este cambio se ha realizado para desbloquear los códigos base mixtos para que puedan adoptar .NET Core. Esto no funciona para otros tipos de proyecto de C++ ni para los tipos de proyecto de C++ destinados a .NET Framework. No hay planes para ampliar la compatibilidad con PackageReference a otros escenarios de C++. El equipo está trabajando en experiencias independientes que implican vcpkg para escenarios que no son de MSBuild y para agregar mayor funcionalidad.

  • Se ha agregado una ventana de Serial Monitor para el desarrollo insertado, disponible a través de Depurar>Windows>Serial Monitor.

  • Se ha mejorado la indexación de C++ en aproximadamente el 66 % en comparación con la versión 17.2.

  • Se ha actualizado la versión de CMake que se incluye con Visual Studio a la versión 3.23. Vea las notas de la versión de CMake 3.23 para obtener detalles sobre lo que está disponible.

  • Se han actualizado las versiones de las herramientas de LLVM que se incluyen con Visual Studio a la versión 14. Para obtener más información sobre lo que está disponible, consulte las notas de la versión de LLVM y Clang.

  • Se ha actualizado el conjunto de herramientas de C++ Dev 16.11 en paralelo a la versión 14.29.30145.00. La versión más reciente del conjunto de herramientas de C++ Dev 16.11 contiene correcciones de errores importantes, incluida la corrección de todos los informes de defectos de C++20 restantes. Para obtener más información sobre las correcciones de errores, incluidos los informes de defectos de C++20 en Dev 16.11, consulte Notas de la versión 16.11.14 de Visual Studio 2019.

  • Se han realizado varias mejoras en la experiencia en el editor de los módulos de C++. Estamos trabajando continuamente para mejorar la calidad de la experiencia, pero le animamos a probarlos en la versión 17.3. Notificar los problemas restantes a través de Developer Community.

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

Para obtener un resumen de las nuevas características y correcciones de errores en la versión 17.2 de Visual Studio, vea Novedades de la versión 17.1 de Visual Studio 2022.

  • Se ha agregado compatibilidad con el compilador en la característica de C++23 deducing thisthis, disponible en la opción /std:c++latest.

  • Se ha agregado compatibilidad con IntelliSense en las características de C++23 deducing thisthis y if consteval.

  • Se ha agregado compatibilidad con las sugerencias de inserción de nombres de parámetros y tipos, presionando Alt+F1 o pulsando dos veces Ctrl. Este comportamiento se puede personalizar en Herramientas > Opciones > Editores de texto > C/C++ > IntelliSense.

  • Se ha agregado compatibilidad experimental con módulos de C++20 en proyectos de CMake. Esta compatibilidad solo está disponible actualmente con el generador de Visual Studio (MSBuild).

  • En la versión 17.1 se ha introducido el registro periférico y las vistas RTOS para desarrolladores de software insertado. Seguimos mejorando las funcionalidades de esas vistas con mejoras de facilidad de uso en la versión 17.2:

    • La ventana de herramientas RTOS ahora está oculta de forma predeterminada. De esta forma, se evita que aparezcan ventanas de herramientas con mensajes de error que no son relevantes cuando no se usa un RTOS.
    • Cuando un usuario hace doble clic en un objeto RTOS en la ventana de herramientas, se agrega un reloj para el objeto.
    • Al seleccionar los valores inicial y final del puntero de pila en la ventana de herramientas RTOS, se abre en la ventana de memoria.
    • Se ha agregado el reconocimiento de subprocesos para destinos de dispositivo a la ventana de pila de llamadas.
    • Los usuarios ahora pueden seleccionar un icono de anclaje junto a periféricos, registros o campos para anclarlos en la parte superior de la vista de periféricos.
  • Se han agregado implementaciones del resto de informes de defectos de C++20 (también conocidos como backports). Todas las características de C++20 ahora están disponibles en la opción /std:c++20. Para más información sobre los backports implementados, consulte el proyecto Informes de defectos de C++20 en el repositorio de GitHub de Microsoft/STL y la entrada de blog Finalización de STL de MSVC/std:c++20.

  • Se han agregado varias características de la biblioteca de C++23, disponibles en la opción /std:c++latest. Para más información sobre las nuevas características, consulte el registro de cambios del repositorio de STL.

  • Se ha mejorado el rendimiento de la indexación inicial de C++ hasta un 20 %, según la profundidad del gráfico de inclusión.

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

Para obtener un resumen de las nuevas características y correcciones de errores en la versión 17.1 de Visual Studio, vea Novedades de la versión 17.1 de Visual Studio 2022.

  • Se ha agregado una nueva plantilla de valor preestablecido de configuración para configurar y compilar proyectos de CMake en un sistema macOS remoto con CMakePresets.json. También puede iniciar destinos de CMake en un sistema macOS remoto y depurar remotamente en el depurador de Visual Studio con el respaldo de GDB o LLDB.
  • Ahora puede depurar volcados de núcleo en un sistema macOS remoto desde Visual Studio con LLDB o GDB.
  • Las versiones de Clang y LLVM que se incluyen con Visual Studio se han actualizado a la versión 13.
  • La integración de CMake de Visual Studio solo se activa cuando se identifique un archivo CMakeLists.txt en la raíz del área de trabajo abierta. Si se identifica un archivoCMakeLists.txt en otro nivel del área de trabajo, se le pedirá que active la integración de CMake de Visual Studio con una notificación.
  • Nuevas vistas que permiten inspeccionar e interactuar con registros periféricos en microcontroladores y sistemas operativos en tiempo real (RTOS), disponibles a través de depuración>de registros de Windows>Embedded
  • Se ha agregado una nueva ventana de visualización de registros para destinos incrustados, disponible en Depurar>Ventanas>RTOS Objects (Objetos RTOS). Para obtener más información, vea Desarrollo de software insertado en Visual Studio.

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

Para ver 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

  • Se ha 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 actualizan 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 P1689R5. 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 Se ha configurado std::stringconstexpr en VS 2019 16.10. Ahora se admite para Clang.
  • P1004R2 Se ha configurado std::vectorconstexpren VS 2019 16.10. Ahora se admite para Clang.

Características destacadas de C++23

  • P1048R1 Se ha agregado is_scoped_enum, un nuevo rasgo para la biblioteca estándar de C++, que detecta si un tipo es una enumeración con ámbito.
  • P1132R7out_ptr(), inout_ptr()
  • P1679R3contains() para basic_string y basic_string_view
  • P1682R3to_underlying() para enumeraciones
  • P2162R2 Se permite la herencia de std::variant.
  • P2166R1 Se prohíbe la construcción de basic_string y basic_string_view de nullptr. Este cambio 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 rechaza con errores del compilador.
  • P2186R2 Se ha quitado la compatibilidad con la recolección de elementos no utilizados. Este cambio 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: seleccione Ayuda>Enviar comentarios para compartir sus comentarios en Developer Community.

  • 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_.

  • Se ha mejorado la detección de desreferencia de punteros nulos en las 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 información sobre las novedades de C++ en Visual Studio 2019, consulte Novedades de C++ en Visual Studio 2019. Para información sobre las novedades de C++ en Visual Studio 2017, consulte Novedades de C++ en Visual Studio 2017. Para obtener información sobre las novedades de las versiones anteriores, consulte Novedades de Visual C++ 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 del IDE de Visual Studio, o bien desde Ayuda>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 las conclusiones y recomendaciones disponibles en el sitio blogs para desarrolladores de Microsoft para mantenerse al día en todas las nuevas versiones. 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 son de especial interés.