Lo nuevo de Visual C++ en Visual Studio 2013

En este documento se presentan las características nuevas y mejoradas que ofrece Visual C++ en Visual Studio 2013.

Para obtener información sobre otras novedades de Visual Studio 2013, vea Novedades de Visual Studio 2013.

Compatibilidad mejorada de los estándares ISO C/C++

Compilador

  • Admite estas características del lenguaje ISO C++11:

  • Admite estas características del lenguaje ISO C99:

    • _Bool

    • Literales compuestos.

    • Inicializadores designados.

    • Mezcla de declaraciones con código.

  • La conversión de literales de cadena a valores modificables puede anularse mediante la nueva opción del compilador /Zc:strictStrings.En C++98, la conversión de literales de cadena a char * (y de literales de cadena de tipo ancho a wchar_t *) cayó en desuso.En C++11, la conversión se quitó completamente.Aunque el compilador podría cumplir estrictamente la norma, en su lugar se proporciona la opción /Zc:strictStrings para poder controlar la conversión.De forma predeterminada, esta opción está desactivada.Observe que cuando utilice esta opción en modo de depuración, STL no se compilará.

  • Conversiones de referencia de rvalue/lvalue. Con las referencias rvalue, C++11 puede diferenciar claramente entre lvalues y rvalues.Anteriormente, el compilador de Visual C++ no proporcionaba esta funcionalidad en escenarios concretos del marco.Se ha agregado una nueva opción del compilador, /Zc:rvalueCast, para hacer que el compilador sea compatible con el documento de trabajo del lenguaje C++(vea la sección 5.4, [expr.cast]/1).

    El comportamiento predeterminado cuando no se especifica esta opción es el mismo que en Visual Studio 2012.

[!NOTA]

* En el caso de las funciones establecidas como valores predeterminados, no se admite el uso de =default para solicitar constructores de movimiento miembro a miembro y operadores de asignación de movimiento.

Bibliotecas C99

Se han agregado declaraciones e implementaciones para las funciones que faltan en estos encabezados: math.h, ctype.h, wctype.h, stdio.h, stdlib.h y wchar.h.También se han agregado los nuevos encabezados complex.h, stdbool.h, fenv.h e inttypes.h, además de implementaciones para todas las funciones declaradas en ellos.Hay nuevos encabezados de contenedores de C++ (ccomplex, cfenv, cinttypes y ctgmath) y otros se han actualizado (ccomplex, cctype, clocale, cmath, cstdint, cstdio, cstring, cwchar y cwctype).Para obtener más información, vea Compatibilidad con bibliotecas de C99 en Visual Studio 2013.

Biblioteca de plantillas estándar

  • Compatibilidad con operadores de conversión explícitos de C++11, listas de inicializadores, enumeraciones con ámbito y plantillas variádicas.

  • Todos los contenedores admiten los requisitos específicos del elemento C++11.

  • Compatibilidad con estas características de C++14:

    • “Objetos functor de operador transparentes” less<>, greater<>, plus<>, multiplies<>, etc.

    • make_unique<T>(args...) y make_unique<T[]>(n)

    • Funciones no miembro cbegin()/cend(), rbegin()/rend() y crbegin()/crend().

  • <atomic> registró numerosas mejoras de rendimiento.

  • <type_traits> registró correcciones importantes de estabilización y código.

Cambios importantes

Esta compatibilidad mejorada con las normas ISO C/C++ puede requerir cambios en el código existente para que se ajuste a C++11 y se compile correctamente en Visual C++ en Visual Studio 2013.Para obtener más información, vea Cambios importantes en Visual C++.

Para obtener más información sobre el nuevo lenguaje C++11/14 y las características de STL, vea Compatibilidad con las características de C++11 (C++ moderno) y la página web sobre las características de STL en C++11/14, correcciones y cambios importantes en Visual Studio 2013.

Mejoras de las bibliotecas de Visual C++

  • Se ha agregado SDK de REST de C++.Dispone de una implementación moderna de C++ de los servicios REST.Para obtener más información, vea SDK de REST de C++.

  • Se ha mejorado la compatibilidad con la textura de C++ AMP.Ahora incluye compatibilidad con los mapas MIP y los nuevos modos de muestreo.

  • Las tareas PPL admiten varias tecnologías de programación y depuración asincrónica.Las nuevas API habilitan la creación de tareas PPL tanto para resultados normales como para condiciones de excepción.

Rendimiento de aplicaciones de C++

  • Ahora, el vectorizador automático reconoce y optimiza más patrones de C++ para que el código se ejecute con mayor rapidez.

  • Mejoras de la calidad del código de plataforma ARM y microarquitectura Atom.

  • Se ha agregado la convención de llamada __vectorcall.Para utilizar registros vectoriales, pase los argumentos de tipo del vector con la convención de llamada de __vectorcall.

  • Nuevas opciones del vinculador. Los modificadores de /Gw (compilador) y de /Gy (ensamblador) permiten optimizaciones del vinculador para generar binarios más ligeros.

  • La compatibilidad de memoria compartida de C++ AMP permite reducir o eliminar los procesos de copia de datos entre la CPU y la GPU.

  • Mejoras de optimización guiada por perfiles (PGO):

    • Mejoras de rendimiento a partir de una reducción en el espacio de trabajo de aplicaciones optimizadas mediante PGO.

    • Nuevo PGO para el desarrollo de aplicaciones de la Tienda Windows.

Compatibilidad con el desarrollo de aplicaciones de la Tienda Windows

  • Compatibilidad con tipos a los que se aplica la conversión boxing en estructuras de valores. Ahora puede definir tipos de valores utilizando campos que pueden ser null; por ejemplo, IBox<int>^ en lugar de int.Esto significa que los campos pueden tener un valor o ser iguales a nullptr.

  • Información de excepción más completa. C++/CX admite el nuevo modelo de errores de Windows que habilita la captura y la propagación de información detallada de excepciones a través de la interfaz binaria de aplicaciones (ABI); esto incluye las pilas de llamadas y las cadenas de mensaje personalizadas.

  • Object::ToString() ahora es virtual. Ahora puede reemplazar ToString en tipos ref de Windows definidos por el usuario en tiempo de ejecución.

  • Compatibilidad con las API desusadas. Las API públicas de Windows en tiempo de ejecución ahora se pueden marcar como desusadas y se puede mostrar en ellas un mensaje personalizado que aparezca como una advertencia de compilación y que proporcione directrices sobre la migración.

  • Mejoras del depurador. Compatibilidad con la depuración de interoperabilidad nativa/JavaScript, diagnóstico de excepciones de Windows en tiempo de ejecución y depuración de código asincrónica (Windows en tiempo de ejecución y PPL).

[!NOTA]

Además de las características y mejoras específicas de C++ que se describen en esta sección, hay otras mejoras de Visual Studio que pueden ayudarle también a escribir aplicaciones de la Tienda Windows más eficaces.Para obtener más información sobre estas características, vea Guía de características de Windows 8.1.Para obtener más información sobre las nuevas plantillas de aplicaciones, vea Plantillas de proyecto C#, VB y C++ para aplicaciones de la Tienda Windows.Para obtener una lista de nuevas funcionalidades de la plataforma, vea Windows 8.1 Preview: nuevas API y características.

Mejoras de diagnósticos

  • Mejoras del depurador. Compatibilidad con la depuración asincrónica y depuración Solo mi código.

  • Categorías de análisis de código. Ahora puede ver el resultado por categorías desde el analizador de código, lo que le ayudará a detectar y corregir los defectos del código.

  • Diagnóstico XAML. Ahora puede diagnosticar problemas relacionados con la capacidad de respuesta de la interfaz de usuario y el uso de la batería en XAML.

  • Mejoras de depuración de gráficos y GPU.

    • Captura remota y reproducción en dispositivos reales.

    • Depuración simultánea de C++ AMP y CPU.

    • Diagnósticos mejorados en tiempo de ejecución de AMP de C++.

    • Depuración de seguimiento del sombreador de cálculo de HLSL.

Mejoras de gráficos 3D

  • Compatibilidad de la canalización de contenido de la imagen con el formato premultiplicado alfa DDS.

  • El Editor de imágenes utiliza el formato alfa premultiplicado para la representación y, por tanto, impide que los artefactos se representen como halos oscuros.

  • Editores de imágenes y modelos. La creación de filtros definidos por el usuario ahora se admite en el Diseñador de sombras del Editor de imágenes y el Editor de modelos.

IDE y productividad

El IDE de Visual Studio tiene mejoras significativas que le ayudarán a ser más productivo al crear código en C++.

  • Formato mejorado de código. Puede aplicar más valores de formato al código de C++.Con esta configuración, puede controlar la colocación de llaves en una nueva línea y las palabras clave, la sangría, el espaciado y el ajuste de línea. El formato del código se aplica automáticamente cuando se completan instrucciones y bloques, y también cuando se pega código en un archivo.Para modificar la configuración del formato, en la barra de menús de Visual Studio, elija Herramientas, Opciones, expanda los nodos Editor de texto, C/C++ y Formato y, a continuación, realice los cambios.También puede utilizar el cuadro Inicio rápido para acceder a estas opciones.

  • Finalización de llave. El código de C++ ahora completa automáticamente los caracteres de cierre que se corresponden con estos caracteres de apertura:

    • { (llave)

    • [ (corchete)

    • ( (paréntesis)

    • ' (comilla simple)

    • " (comilla doble)

  • Características adicionales de finalización automática de C++.

    • Agrega un punto y coma a los tipos de clases.

    • Completa los paréntesis de los literales de cadena sin formato.

    • Rellena los comentarios de varias líneas (/* */).

  • Buscar todas las referencias ahora resuelve automáticamente y filtra las referencias en segundo plano después de mostrar la lista de coincidencias textuales. Para deshabilitar la resolución de referencias, en la barra de menús de Visual Studio, elija Herramientas, Opciones, expanda los nodos Editor de texto, C/C++ y Avanzadas, y cambie el valor de Deshabilitar resolución en Referencias.

Para modificar los valores de la finalización de llave, en la barra de menús de Visual Studio, elija Herramientas, Opciones, expanda los nodos Editor de texto, C/C++ y General y, a continuación, realice los cambios.También puede cambiar la configuración de todos los lenguajes de Visual Studio expandiendo los nodos Editor de texto, Todos los lenguajes y General.

Para modificar los valores específicos de C++, en la barra de menús, elija Herramientas, Opciones, expanda los nodos Editor de texto, C/C++ y Avanzadas y, a continuación, realice los cambios.

  • Filtrado de la lista de miembros basado en contexto. Los miembros no disponibles se excluyen de las listas de miembros de IntelliSense. Por ejemplo, los miembros privados no se muestran en la lista de miembros a menos que modifique el código que implementa el tipo.Mientras la lista de miembros está abierta, puede presionar Ctrl+J para quitar un nivel de filtrado (solo se aplica a la ventana activa de la lista de miembros).Puede presionar Ctrl+J de nuevo para quitar el filtrado textual y mostrar todos los miembros.

  • Desplazamiento por la Ayuda de parámetros. La signatura de la función que aparece en la información sobre herramientas de ayuda de parámetros ahora cambia según el número de parámetros que se han escrito realmente, en lugar de mostrar sencillamente una signatura arbitraria que no se actualizaba en función del contexto actual.La ayuda de parámetros también funciona correctamente cuando se muestra en funciones anidadas.

  • Alternar entre encabezado y archivo de código. Ahora puede alternar entre un encabezado y su archivo de código correspondiente mediante un comando del menú contextual o un método abreviado de teclado.

  • Puede cambiarse el tamaño de la ventana Propiedades del proyecto de C++.

  • Generación automática de código del controlador de eventos en C++/CX y C++/CLI. Cuando escribe código para agregar un controlador de eventos en un archivo de código C++/CX o C++/CLI, el editor puede generar automáticamente la instancia de delegado y la definición de control de eventos.Cuando el código del controlador de eventos puede generarse automáticamente, aparece una ventana de información sobre herramientas.

  • Mejora de Reconocimiento de ppp. El valor Reconocimiento de ppp de los archivos del manifiesto de aplicación admite ahora el valor "Reconocimiento de ppp elevado por monitor”.

  • Conmutación de configuración más rápida. En el caso de las aplicaciones grandes, el cambio entre configuraciones (especialmente las operaciones de intercambio posteriores), se lleva a cabo mucho más rápido.

  • Efectividad del tiempo de compilación.

    • Compilaciones más rápidas. Las numerosas optimizaciones y la utilización de varios núcleos crean compilaciones más rápidas, especialmente en proyectos grandes.Las compilaciones incrementales de las aplicaciones de C++ que tienen referencias a C++ WinMD también son mucho más rápidas.
  • Para obtener información sobre otras incorporaciones y mejoras del IDE, vea Novedades de Visual Studio 2013 y los otros artículos a los que hace referencia.

Vea también

Conceptos

Novedades de Visual Studio 2013

Otros recursos

Blog del equipo de Visual C++