Compartir a través de


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.13

Fecha de publicación: febrero de 2025

Para obtener más información, vea: Vea
Novedades para desarrolladores de C++ novedades para desarrolladores de C++ en Visual Studio 2022 17.13
Biblioteca estándar (STL) combinada con características de C++26 y C++23, resoluciones de problemas de LWG, mejoras de rendimiento, comportamiento mejorado y errores corregidos Registro de cambios de CETF 17.13
Nuevas características del IDE Notas de la versión 17.13 de Visual Studio 2022
Actualizaciones del lenguaje C++ actualizaciones del compilador de MSVC en Visual Studio 2022 17.13
Mejoras de conformidad del lenguaje C++ mejoras de conformidad de C++, cambios de comportamiento y correcciones de errores en Visual Studio 2022 17.13

Algunas de las novedades más destacadas:

  • mejoras del lenguaje C++

    • Pruebe las características en versión preliminar de C++23 estableciendo el estándar del lenguaje C++ en /std:c++23preview. Esta configuración habilita las últimas características y correcciones de errores de C++23. Para obtener más información, vea /std (Especificar versión estándar de lenguaje).

    • Compatibilidad con el sufijo literal size_t de C++23, que ayuda a evitar truncamientos o desajustes en la comparación de signos, especialmente al escribir bucles. Por ejemplo:

      // Infinite loop if v.size > max unsigned int 
      for (auto i = 0u; i < v.size(); ++i)
      { 
        ...
      } 
      
      // Fixed because of uz literal 
      for (auto i = 0uz; i < v.size(); ++i)
      { 
        ...
      } 
      
    • Compatibilidad con longitudes de vector para la generación de código en x86 y x64. Para obtener más información, consulte /vlen.

    • Compatibilidad con Intel Advanced Vector Extensions 10 versión 1. Para obtener más información sobre /arch:AVX10.1, vea /arch (x64).

  • Mejoras de la biblioteca estándar

    • Compatibilidad con bibliotecas estándar para corrutinas. En este ejemplo de P2502R2, la función fib es una corrutina. Cuando se ejecuta la instrucción co_yield, fib se suspende y el valor se devuelve al autor de la llamada. Puede reanudar la corrutina fib más adelante para generar más valores sin necesidad de manejo manual del estado.

      std::generator<int> fib()
      { 
        auto a = 0, b = 1; 
      
        while (true)
        { 
            co_yield std::exchange(a, std::exchange(b, a + b)); 
        }
      } 
      
      int answer_to_the_universe()
      { 
        auto rng = fib() | std::views::drop(6) | std::views::take(3); 
        return std::ranges::fold_left(std::move(range), 0, std::plus{}); 
      } 
      
  • Se trasladaron system_clock, high_resolution_clocky chrono_literals de un encabezado interno que se incluía habitualmente a <chrono>. Si ve errores del compilador indicando que tipos como system_clock o literales que defina el usuario como 1729ms no son reconocidos, incluya <chrono>.

  • Se han mejorado las implementaciones vectorizadas de constructores de bitset de cadenas, basic_string::find_last_of(), remove(), ranges::removey las familias de algoritmos de minmax_element() y minmax().

  • Se han agregado implementaciones vectorizadas de:

    • find_end() y ranges::find_end para elementos de 1 byte y 2 bytes.
    • basic_string::find() y basic_string::rfind() para una subcadena.
    • basic_string::rfind() para un solo carácter.
  • Informes de defectos de C++23 combinados:

    • P3107R5 Permitir una implementación eficaz de <print>.
    • P3235R3std::print Más tipos más rápidos con menos memoria.
  • GitHub Copilot

    • GitHub Copilot Free ya está disponible. Obtenga 2000 finalizaciones de código y 50 solicitudes de chat al mes sin costo alguno.

    • Las finalizaciones de código de GitHub Copilot proporcionan sugerencias de autocompletar insertadas a medida que se escribe código. Para mejorar la experiencia de los desarrolladores de C++, GitHub Copilot incluye otros archivos relevantes como contexto. Esto reduce las alucinaciones a la vez que ofrece sugerencias más relevantes y precisas.

    • Ahora puede solicitar una revisión de código desde GitHub Copilot desde la ventana Cambios de Git:

      Captura de pantalla de la ventana Cambios de Git con el botón Revisar de GitHub Copilot resaltado.

      La ventana Cambios de Git está abierta con el botón Revisión de GitHub Copilot resaltado.

      GitHub Copilot busca posibles problemas y crea comentarios para ellos:

      captura de pantalla de GitHub Copilot que explica un problema.

      GitHub Copilot encontró un problema con la línea si ( is_enabled_) new_site.disable(). Indica que puede ser un error y probablemente debería ser si ( is_enabled_) new_site.enable() porque parece que la intención es habilitar el nuevo sitio si el punto de interrupción está habilitado.

      Para usar esta característica, asegúrese de que tiene activado lo siguiente:

      • Herramientas>Opciones>Características en vista previa (GB)>Comentarios de solicitud de incorporación de cambios
      • Herramientas>Opciones>GitHub>Copilot>Integración de control de origen>Habilitar Características en vista previa (GB).
    • Ediciones de GitHub Copilot es una nueva función que puede realizar cambios en varios archivos de su proyecto. Para iniciar una nueva sesión de ediciones, haga clic en Crear nueva sesión de edición en la parte superior de la ventana chat de GitHub Copilot:

      captura de pantalla de la ventana Chat de GitHub Copilot. El botón Crear nueva sesión de edición está resaltado.

      Describa los cambios que desea realizar y Copilot sugerirá las modificaciones pertinentes. Puede obtener una vista previa de las ediciones uno a uno y aceptar las que desee o realizar correcciones:

      Captura de pantalla de la ventana Chat de Copilot de GitHub que muestra los archivos que editó.

      GitHub Copilot muestra un resumen de los cambios realizados, como 1. Cree una nueva subclase range_breakpoint en include/libsdb/breakpoint.hpp" y 2. Implemente la clase range_breakpoint en src/breakpoint.cpp. Se muestra una opción para aceptar los cambios.

      Para obtener más información, consulte Iteración en varios archivos más eficientemente con Ediciones de GitHub Copilot.

  • CMake

    • Ahora admite los preajustes de CMake v9. Nuevas expansiones de macros en el campo de inclusión de un ajuste predefinido. Para obtener más información, consulte Expansión de macros en la documentación oficial de CMake.

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

Fecha de publicación: noviembre de 2024

Para obtener más información, vea: Vea
Novedades para desarrolladores de C++ Novedades para desarrolladores de C++ en Visual Studio 2022 17.12
Biblioteca estándar (STL) combinada con características de C++26 y C++23, resoluciones de problemas de LWG, mejoras de rendimiento, comportamiento mejorado y errores corregidos Registro de cambios de CETF 17.12
Nuevas características del IDE de Visual Studio 17.12 Notas de la versión 17.12 de Visual Studio 2022
Mejoras de conformidad de C++ en Visual Studio 2022 17.12 Mejoras en la conformidad de C++, cambios de comportamiento y correcciones de errores en Visual Studio 2022 17.12

Algunas de las novedades más destacadas:

  • Mejoras de la biblioteca estándar
    • Se completó la implementación de intervalos de formato (P2286R8) de C++23. Se han agregado formateadores para los adaptadores de contenedor stack, queue y priority_queue.
    • Se han agregado operadores de subíndice multidimensional, que también admiten <mdspan>. Por ejemplo: print("m[{}, {}]: '{}'; ", i, j, m[i, j]).
  • Desarrollo de juegos en C++
  • Build Insights
    • Puede ejecutar Build Insights en los archivos seleccionados. Seleccione los archivos que desee en el Explorador de soluciones, haga clic con el botón derecho y elija Ejecutar Build Insights en archivos seleccionados: Captura de pantalla de los archivos en el Explorador de soluciones. El menú contextual está abierto y se resalta la opción Ejecutar Build Insights en archivos seleccionados.
    • Puede filtrar los resultados de Build Insights por proyecto. Haga clic en el botón de filtro del encabezado de columna de filtro y seleccione los proyectos para los que desea ver los resultados: Captura de pantalla de la ventana Build Insights con la pestaña Archivos incluidos abierta. Se ha seleccionado el botón de filtro y aparece una lista de proyectos. Las casillas de verificación junto a Dos proyectos están marcadas.
    • Haga clic en el icono de signo de interrogación de la ventana Build Insights para ver una breve descripción de las pestañas de la ventana Build Insights y un vínculo a la documentación para obtener una explicación detallada: Captura de pantalla de la ventana Build Insights con el botón ver explicaciones (un signo de interrogación en un círculo) resaltado.
  • GitHub Copilot
    • Puede hacer clic en Preguntar a Copilot junto al valor de una variable para obtener información basada en IA sobre lo que le ha llevado a su estado actual. Por ejemplo, el siguiente programa tiene un error de desviación por uno en su condición de bucle:

    Captura de pantalla de la ventana Automáticos. La variable con nombre es NULL. El icono de Preguntar a Copilot está resaltado.

    El código que provocó este problema es: para (auto it = h.animals_.begin(); <= h.animals_.end(); it++).

    Si hace clic en el icono preguntar a Copilot para la variable it, le indica por qué es <NULL>:

    Captura de pantalla de una ventana de GitHub Copilot.

    Este error está dentro de una función definida como int calculate_number_of_cats(const house & h). El mensaje de GitHub Copilot indica: "El valor de la expresión es NULL, lo que significa que el iterador no apunta a ningún elemento válido en el vector animals_. En el contexto del programa, se supone que recorre en iteración el vector de animals_ en el objeto house para contar el número de objetos cat. Por qué es null. Basado en los contextos locales y de pila de llamadas: el objeto house h tiene un vector de animals_ vacío (size=0). La condición del bucle it <= h.animals_.end() es incorrecta. Debería ser it != h.animals_.end()."

    • Puede hacer clic en Preguntar a Copilot sobre los errores de la lista de errores de Visual Studio para obtener ayuda sobre el error y una corrección sugerida. Por ejemplo:

    Captura de pantalla de la ventana Lista de errores.

    El icono Preguntar a Copilot está resaltado junto a un error que indica que unique_ptr está intentando hacer referencia a una función eliminada.

    Si hace clic en Preguntar a Copilot, le indica el error:

    Captura de pantalla de la explicación de GitHub Copilot para el error.

    El mensaje de Copilot indica: "El error se produce porque el bucle for basado en intervalo estaba intentando copiar objetos std::unique_ptr, que no se permite porque std::unique_ptr no se puede copiar. Para corregirlo, he cambiado el bucle para usar una referencia para evitar copiar los objetos std::unique_ptr. De este modo, el bucle recorre en iteración las referencias a los objetos std::unique_ptr, que se permiten".

  • Depuración
    • Nuevos visualizadores de depuración para mutex, recursive_mutex y move_iterator.
    • El depurador ahora muestra valores devueltos insertados: Captura de pantalla de una información sobre herramientas que muestra el valor 8.25. Es el resultado de la expresión que sigue a la instrucción return que se ha omitido paso a paso.

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

Fecha de publicación: agosto de 2024

Para obtener más información, vea: Vea
Novedades para desarrolladores de C++ Novedades para desarrolladores de C++ en Visual Studio 2022 17.11
Bibliotecas estándar (STL) combinadas de C++26 y C++23, informes de defectos de C++20, resoluciones de problemas de LWG, mejoras de rendimiento, comportamiento mejorado y errores corregidos Registro de cambios de CETF 17.11
Nuevas características del IDE de Visual Studio 17.11 Notas de la versión 17.11 de Visual Studio 2022
Mejoras de conformidad de C++ en Visual Studio 2022 17.11 Mejoras en la conformidad de C++, cambios de comportamiento y correcciones de errores en Visual Studio 2022 17.11

Una lista parcial de las nuevas características:

  • Mejoras de la biblioteca estándar

    • La implementación de salida con formato ahora incluye std::range_formatter y formateadores para std::pair y std::tuple.
    • Se ha agregado compatibilidad con std::println() sin argumentos. Esto imprime una línea en blanco como se propone en P3142R0.
    • Vectorización mejorada para varios algoritmos, como replace_copy(), replace_copy_if(), ranges::replace_copyranges::replace_copy_if, find_first_of() y ranges::find_first_of, para elementos de 8 y 16 bits, , mismatch(), ranges::mismatchcount()ranges::countfind()ranges::findranges::find_last y ranges::iota.
  • Desarrollo de juegos en C++

    • Ahora puede agregar plantillas de clase, módulos y complementos comunes de Unreal Engine desde Visual Studio. Para obtener más información, consulte Adición de clases, módulos y complementos de Unreal Engine en Visual Studio.
    • La nueva barra de herramientas de Unreal Engine proporciona acceso rápido a las acciones relacionadas con Unreal Engine desde Visual Studio. La barra de herramientas permite asociar rápidamente a los procesos de Unreal Engine, volver a examinar la caché de planos técnicos, acceder rápidamente al registro de Unreal Engine y proporcionar acceso rápido a la página de configuración de Unreal Engine para Visual Studio. Para obtener más información, consulte Barra de herramientas de Unreal Engine.
    • Ahora puede filtrar los resultados de seguimiento por proyecto. Además, los resultados en cada fila muestran la ruta de acceso relativa y el nombre de archivo en lugar de la ruta de acceso completa. También se ha mejorado la agrupación de resultados en la vista Archivos incluidos:

    Captura de pantalla de los resultados de diagnóstico mejorados de Archivos incluidos.

    La vista Archivos incluidos tiene una nueva columna para el proyecto. La columna Proyecto está seleccionada y se han seleccionado proyectos como (Seleccionar todo), CompilerIdC, OpenAL, común, etc. Los archivos incluidos se enumeran por ruta de acceso relativa y nombre de archivo y agrupados juntos.

  • Depuración de CMake

    • Ahora puede depurar scripts y archivos CMakeLists.txt de CMake en el depurador de Visual Studio para proyectos de CMake que tienen como destino Linux a través del Subsistema de Windows para Linux (WSL) o SSH. Para iniciar una sesión de depuración de CMake en Visual Studio, establezca un punto de interrupción en el archivo CMakeLists.txt y, a continuación, vaya a Proyecto>Configurar caché con depuración de CMake.
  • GitHub Copilot

    • Al mantener el puntero sobre símbolos en el editor de código, haga clic en el botón Copilot Más información en el cuadro de diálogo Información rápida para obtener más información sobre un símbolo determinado:

    Captura de pantalla de la ventana Información rápida.

    La ventana Información rápida se muestra encima de una función. El vínculo Más información está resaltado.

    • GitHub Copilot puede generar sugerencias de nombres para los identificadores (variables, métodos o clases) basándose en cómo se usa el identificador y en el estilo de su código.

      Captura de pantalla del cuadro de diálogo Cambiar nombre de GitHub Copilot.

      El cuadro de diálogo Cambiar nombre tiene un campo Nuevo nombre con una lista desplegable que muestra estas opciones: text_color, font_color, display_color, console_color y menu_text_color.

    Necesita una suscripción de GitHub Copilot activa. Haga clic con el botón derecho en la variable cuyo nombre desea cambiar y elija Cambiar nombre (Ctrl+R, Ctrl+R). Seleccione el icono de estrella de GitHub Copilot para generar sugerencias de nomenclatura.

  • Depuración

    • Los puntos de interrupción condicionales en C++ son más rápidos.
  • Mejoras de diagnósticos

    • Se han mejorado los diagnósticos al llamar a std::get<T> en una std::tuple que tiene varias instancias de T en sus argumentos de plantilla. MSVC usado para notificar:
      error C2338: static_assert failed: 'duplicate type T in get<T>(tuple)'.
      Ahora informa de lo siguiente:
      error C2338: static_assert failed: 'get<T>(tuple<Types...>&) requires T to occur exactly once in Types.(N4971 [tuple.elemm]/5)'
    • Se han mejorado los diagnósticos cuando std::ranges::to no puede crear el resultado solicitado. MSVC usado para notificar:
      error C2338: static_assert failed: 'the program is ill-formed per N4950 [range.utility.conv.to]/2.3'
      Ahora informa de lo siguiente:
      error C2338: static_assert failed: 'ranges::to requires the result to be constructible from the source range, either by using a suitable constructor, or by inserting each element of the range into the default-constructed object. (N4981 [range.utility.conv.to]/2.1.5)'

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

Fecha de publicación: mayo de 2024

Para obtener más información, vea: Vea
Novedades para desarrolladores de C++ Novedades para desarrolladores de C++ en Visual Studio 2022 17.10
Bibliotecas estándar (STL) combinadas de C++26 y C++23, informes de defectos de C++20, resoluciones de problemas de LWG, mejoras de rendimiento, comportamiento mejorado y errores corregidos Registro de cambios de CETF 17.10
Nuevas características del IDE de Visual Studio 17.10 Notas de la versión 17.10 de Visual Studio 2022
Mejoras de conformidad de C++ en Visual Studio 2022 17.10 Mejoras en la conformidad de C++, cambios de comportamiento y correcciones de errores en Visual Studio 2022 17.10

Una lista parcial de las nuevas características:

  • Actualización del conjunto de herramientas de MSVC: la versión del conjunto de herramientas de MSVC se ha actualizado de 19.39 a 19.40. Esto puede afectar a los proyectos que tienen suposiciones de versión. Para obtener más información sobre algunas maneras en las que esto afecta a los proyectos en los que se supone que las versiones de MSVC son todas las versiones 19.3X para Visual Studio 2022, consulte Número de versión secundaria del conjunto de herramientas de MSVC 14.40 in VS 2022 v17.10.
  • Mejoras en la biblioteca estándar: la biblioteca estándar agregó compatibilidad con los Punteros de formato P2510R3, que aporta el conjunto de especificadores de formato para punteros al usar std::format más en línea con los que ya existen para enteros. Se han mejorado las implementaciones vectorizadas de std::min_element, std::ranges::min y amigos.
  • Build Insights: ahora proporciona información de creación de instancias de plantilla. Consulte el artículo sobre la vista de plantillas para Build Insights en Visual Studio o la grabación sobre la vista de plantillas de Pure Virtual C++ para Build Insights en Visual Studio.
  • Complemento de Unreal Engine: hay una nueva característica de participación para que el complemento Unreal Engine se ejecute en segundo plano, lo que reduce los costes de inicio. Se trata de una característica de participación que se activa a través de Herramientas>Opciones>Unreal Engine.
  • Nuevas características para Linux: consulte Nuevas características de desarrollo de Linux en Visual Studio.
  • Destinos de CMake: ahora puede anclar destinos en la vista Destinos de CMake.
  • Experiencia del usuario de Connection Manager: la experiencia del usuario proporciona una experiencia más fluida al conectarse a sistemas remotos. Para más información, consulte Mejoras de facilidad de uso en Connection Manager de Visual Studio.
  • Comentarios sobre solicitud de cambios: ahora puede ver los comentarios de GitHub y Azure DevOps directamente en el archivo de trabajo. Habilite la marca de características, Comentarios de solicitud de cambios en Opciones>Entorno>Características en vista previa (GB) y consulte la rama de solicitud de cambios para empezar.
  • Contenido generado por IA: GitHub Copilot ahora puede redactar descripciones de solicitudes de cambios. Requiere una suscripción activa de GitHub Copilot. Pruébelo haciendo clic en el icono de lápiz Agregar descripción de solicitud de cambios generada por IA de la ventana Crear una solicitud de cambios.
  • Vista previa de la imagen: mantenga el puntero sobre una ruta de acceso de imagen para ver una vista previa con detalles de tamaño. El tamaño está limitado a 500 px de ancho y alto.

    Captura de pantalla de la vista previa al pasar el puntero

    El mouse se desplaza sobre la línea std::filesystem::path vs_logo_path = "../images/vs_logo.png". Debajo aparece una vista previa del logotipo de Visual Studio y la información que tiene un tamaño de 251 x 500 píxeles y 13,65 KB.

  • Creación de puntos de interrupción o puntos de seguimiento: ahora puede crear puntos de interrupción condicionales o puntos de seguimiento directamente desde expresiones del código fuente desde el menú contextual. Esto funciona en nombres y valores de campo o propiedad de variables automáticas, locales, ventanas de inspección o información sobre datos.
  • Cuadro de diálogo Asociar a proceso: la funcionalidad proporcionada por el cuadro de diálogo Asociar a proceso es más fácil de usar. Ahora puede cambiar fácilmente entre las vistas de árbol y lista, organizar los procesos mejor con secciones contraíbles y seleccionar tipos de código con un cuadro combinado simplificado. Además, la característica "Seleccionar/Realizar seguimiento de ventana" ahora es más fácil de usar, lo que permite el seguimiento bidireccional, seleccionar un proceso resalta su ventana y hacer clic en una ventana selecciona su proceso.
  • Integración de GitHub Copilot: las extensiones de GitHub Copilot y Copilot Chat ahora están unificadas y ahora se envían directamente en Visual Studio. Para instalarlo, instale el componente GitHub Copilot en el Instalador de Visual Studio:

    Captura de pantalla de la opción de instalación de GitHub Copilot del Instalador de Visual Studio.

    La interfaz de GitHub Copilot está en la esquina superior derecha de Visual Studio. Para usarlo, necesita una suscripción activa de GitHub Copilot.

    Captura de pantalla del botón GitHub Copilot.

    El botón GitHub Copilot se muestra en la esquina superior derecha de Visual Studio. Tiene opciones para abrir una ventana de chat, la configuración de GitHub Copilot, obtener más información y administrar la suscripción de Copilot.

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

Fecha de publicación: febrero de 2024

Para obtener más información, vea: Vea
Novedades para desarrolladores de C++ Novedades para desarrolladores de C++ en Visual Studio 2022 17.9
Características combinadas de la biblioteca estándar (STL) de C++23, mejoras de rendimiento, comportamiento mejorado, resoluciones de problemas LWG y errores corregidos Registro de cambios de CETF 17.9
Nuevas características del IDE de Visual Studio 17.9 Notas de la versión 17.9 de Visual Studio 2022
Mejoras de conformidad de C++ en Visual Studio 2022 17.9 Mejoras en la conformidad de C++, cambios de comportamiento y correcciones de errores en Visual Studio 2022
Resumen de las actualizaciones de back-end de C++ Actualizaciones de back-end de MSVC desde visual Studio 2022, versión 17.3

Una lista parcial de las nuevas características:

  • Diagnóstico de #include, que proporciona un análisis detallado de las directivas #include. Para activar esta característica, haga clic con el botón derecho en una #include y elija directivas #include>Activar el diagnóstico de directivas #include. Encima de cada #include es el número de veces que el código hace referencia a ese archivo #include. 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 las directivas #include, ejecute Build Insights; para ello, vaya a Compilar>Ejecutar Build Insights en la solución>Compilar.

    Captura de pantalla de diagnóstico de #include.

    Encima de # include hay un vínculo de **reference** y muchas de las referencias a este archivo #include (en este caso 1). El tiempo de compilación también aparece (en este caso, menos de medio segundo).

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

    Captura de pantalla de la ventana de diseño de memoria

    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 quiere usar una versión específica de CMake que no se incluye con Visual Studio. Vaya a Herramientas>Opciones y seleccione CMake>General. Seleccione Habilitar ejecutable de CMake personalizado y especifique la ruta de acceso del directorio del ejecutable de CMake.

    Captura de pantalla del cuadro de diálogo opciones de CMake

    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 con proyectos de Unreal Engine
  • Compatibilidad mejorada con C++23: std::format y std::spanformattable, range_format, format_kind y set_debug_format() como parte de los Intervalos de formato P2286R8<mdspan> 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.

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

Fecha de publicación: noviembre de 2023

Para obtener más información, vea: Vea
Novedades para desarrolladores de C++ Novedades para desarrolladores de C++ en Visual Studio 2022 17.8
Biblioteca estándar (STL) combinada C++26, características de C++23, extensiones de C++20, resoluciones de problemas de LWG, mejoras de rendimiento, comportamiento mejorado y errores corregidos Registro de cambios de CETF 17.8
Nuevas características en el IDE de Visual Studio 17.8 Notas de la versión 17.8 de Visual Studio 2022
Mejoras en la conformidad de C++ en Visual Studio 2022 17.8 Mejoras en la conformidad de C++, cambios de comportamiento y correcciones de errores en Visual Studio 2022
Información general sobre las mejoras de C++ en Visual Studio, VS Code y vcpkg durante 2023 Un año de mejoras de C++

Una lista parcial de las nuevas características:

  • 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 las 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 directivas #include 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:
  • 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.

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

Fecha de publicación: agosto de 2023

Para obtener más información, vea: Vea
Novedades para desarrolladores de C++ novedades para desarrolladores de C++ en Visual Studio 2022 17.7
Nuevas características de C++ específicas para el desarrollo de juegos Liberación del poder de Visual Studio 2022 para el desarrollo de juegos de C++
Características combinadas de la biblioteca estándar (STL) de C++23, resoluciones de problemas LWG, mejoras de rendimiento, comportamiento mejorado y errores corregidos Registro de cambios de CETF 17.7
Nuevas características en el IDE de Visual Studio 17.7 Notas de la versión 17.7 de Visual Studio 2022
Mejoras en la conformidad de C++ en Visual Studio 2022 17.7 Mejoras en la conformidad de C++, cambios de comportamiento y correcciones de errores en Visual Studio 2022

Una lista parcial de las nuevas características:

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

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

Fecha de publicación: mayo de 2023

Para obtener más información, vea: Vea
Novedades para desarrolladores de C++ novedades para desarrolladores de C++ en Visual Studio 2022 17.6
Características combinadas de la biblioteca estándar (STL) de C++23, resoluciones de problemas LWG, mejoras de rendimiento, comportamiento mejorado y errores corregidos Registro de cambios de CETF 17.6
Nuevas características en el IDE de Visual Studio 17.6 Notas de la versión 17.6 de Visual Studio 2022
Mejoras en la conformidad de C++ en Visual Studio 2022 17.6 Mejoras en la conformidad de C++, cambios de comportamiento y correcciones de errores en Visual Studio 2022

Una lista parcial de las nuevas características incluye:

  • Depuración de scripts de CMake
  • Compatibilidad integrada con el lenguaje de sombreado de alto nivel (HLSL)
  • Visor de registros de Unreal Engine
  • VCPKG ahora se agrega de manera predeterminada
  • Compatibilidad inicial con C++20 en proyectos de C++/CLI y algunas características de biblioteca estándar de C++23 para intervalos.

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

Fecha de publicación: febrero de 2023

Para obtener más información, vea: Vea
Novedades para desarrolladores de C++ novedades para desarrolladores de C++ en Visual Studio 2022 17.5
Características combinadas de la biblioteca estándar (STL) de C++23, resoluciones de problemas LWG, mejoras de rendimiento, comportamiento mejorado y errores corregidos Registro de cambios de CETF 17.5
Nuevas características en el IDE de Visual Studio 17.5 Notas de la versión 17.5 de Visual Studio 2022

Una lista parcial de las nuevas características incluye:

  • 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]]. 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 y así sucesivamente.
    • P2321R2views::zip (no incluye zip_transform, adjacent ni adjacent_transform)

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

Fecha de publicación: noviembre de 2022

Para obtener más información, vea: Vea
Novedades para desarrolladores de C++ novedades para desarrolladores de C++ en Visual Studio 2022 17.4
Características combinadas de la biblioteca estándar (STL) de C++23, resoluciones de problemas LWG, mejoras de rendimiento, comportamiento mejorado y errores corregidos Registro de cambios de CETF 17.4
Nuevas características en el IDE de Visual Studio 17.4 Notas de la versión 17.4 de Visual Studio 2022
Mejoras en la conformidad de C++ en Visual Studio 2022 17.4 Mejoras en la conformidad de C++, cambios de comportamiento y correcciones de errores en Visual Studio 2022

Una lista parcial de las nuevas características de la versión 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 a Visual Studio con 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

Fecha de publicación: agosto de 2022

Para obtener más información, vea: Vea
Novedades para desarrolladores de C++ Mejoras de C++ en la versión 17.3
Características combinadas de la biblioteca estándar (STL) de C++23, resoluciones de problemas LWG, mejoras de rendimiento, comportamiento mejorado y errores corregidos Registro de cambios de CETF 17.3
Nuevas características en el IDE de Visual Studio 17.3 Notas de la versión 17.3 de Visual Studio 2022
Mejoras en la conformidad de C++ en Visual Studio 2022 17.3 Mejoras en la conformidad de C++, cambios de comportamiento y correcciones de errores en Visual Studio 2022

Una lista parcial de las nuevas características de la versión 17.3:

  • 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

Fecha de publicación: mayo de 2022

Para obtener más información, vea: Vea
Novedades para desarrolladores de C++ Visual Studio 2022 17.2 ya está disponible
Bibliotecas estándar (STL) combinadas de C++20 y C++23, características de C++23, resoluciones de problemas de LWG, mejoras de rendimiento, comportamiento mejorado y errores corregidos Registro de cambios de CETF 17.2
Nuevas características en el IDE de Visual Studio 17.2 Notas de la versión 17.2 de Visual Studio 2022
Mejoras en la conformidad de C++ en Visual Studio 2022 17.2 Mejoras en la conformidad de C++, cambios de comportamiento y correcciones de errores en Visual Studio 2022

Una lista parcial de las nuevas características de la versión 17.2:

  • 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

Fecha de publicación: febrero de 2022

Para obtener más información, vea: Vea
Novedades para desarrolladores de C++ Visual Studio 2022 17.1 ya está disponible.
Características combinadas de la biblioteca estándar (STL) de C++23, resoluciones de problemas LWG, mejoras de rendimiento, comportamiento mejorado y errores corregidos Registro de cambios de CETF 17.1
Nuevas características en el IDE de Visual Studio 17.1 Notas de la versión 17.1 de Visual Studio 2022
Mejoras en la conformidad de C++ en Visual Studio 2022 17.1 Mejoras en la conformidad de C++, cambios de comportamiento y correcciones de errores en Visual Studio 2022

Una lista parcial de las nuevas características de la versión 17.1:

  • 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 Depurar>Windows>Registros incrustados
  • Se ha agregado una nueva vista de subprocesos para proyectos de RTOS, disponible en Depurar>Windows>Objetos de 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

Fecha de publicación: noviembre de 2021

Para obtener más información, vea: Vea
Nuevas características en el IDE de Visual Studio 17.0 Notas de la versión 17.0 de Visual Studio 2022
Bibliotecas estándar (STL) combinadas de C++23 y C++26, informes de defectos de C++20, resoluciones de problemas de LWG, mejoras de rendimiento, comportamiento mejorado y errores corregidos Registro de cambios de CETF 17.0
Mejoras en la conformidad de C++ en Visual Studio 2022 17.0 Mejoras en la conformidad de C++, cambios de comportamiento y correcciones de errores en Visual Studio 2022 17.10

Información general de algunas de las nuevas características 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 del mecanismo Editar y continuar nativo. 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::vectorconstexpr en 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 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.

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

No gustaría conocer su opinión. 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.