Lo nuevo en Visual C++ 2010

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

Compilador y vinculador de Visual C++

Palabra clave auto

La palabra clave auto tiene una nueva finalidad. Use el significado predeterminado de la palabra clave auto para declarar una variable cuyo tipo se deduce de la expresión de inicialización de la declaración de la variable. La opción del compilador /Zc:auto invoca el significado nuevo o anterior de la palabra clave auto.

Especificador de tipo decltype

El especificador de tipo decltype devuelve el tipo de una expresión especificada. Use el especificador de tipo decltype junto con la palabra clave auto para declarar un tipo complejo o que solo conoce el compilador. Por ejemplo, use esta combinación para declarar una función de plantilla cuyo tipo de valor devuelto depende de los tipos de sus argumentos de plantilla. O bien, declare una función de plantilla que llama a otra función y, a continuación, devuelve el tipo de valor de la función a la que se llama.

Expresiones lambda

Las funciones Lambda tienen cuerpo de función pero no tienen nombre. Estas funciones combinan las características más destacadas de los punteros a función y los objetos de función.

Use una función lambda de forma independiente, como parámetro de función de plantilla en lugar de como objeto de función, o junto con la palabra clave auto para declarar una variable cuyo tipo sea lambda.

Referencia a valor R (rvalue)

El declarador de referencias de valores R (&&) declara la referencia a un valor R. Una referencia rvalue permite usar semántica de transferencia de recursos y reenvío directo para escribir constructores, funciones y plantillas más eficaces.

Declaración static_assert

Una declaración static_assert comprueba una aserción de software en tiempo de compilación, a diferencia de otros mecanismos de aserción que realizan la comprobación en tiempo de ejecución. Si se produce un error en la aserción, la compilación no se puede realizar y se emite un mensaje de error especificado.

Palabras clave nullptr y __nullptr

El compilador de Visual C++ permite usar la palabra clave nullptr con código nativo o con código administrado. La palabra clave nullptr indica que un controlador de objeto, un puntero interior o un tipo de puntero nativo no señala ningún objeto. El compilador interpreta nullptr como código administrado cuando se usa la opción del compilador /clr y como código nativo cuando no se usa la opción /clr.

La palabra clave __nullptr específica de Microsoft tiene el mismo significado que nullptr, pero solo se aplica a código nativo. Si compila el código de C/C++ nativo usando la opción del compilador /clr, el compilador no puede determinar si la palabra clave nullptr es un término nativo o administrado. Para que su intención le resulte clara al compilador, use la palabra clave nullptr para especificar el término administrado y __nullptr para especificar el término nativo.

Opción del compilador /Zc:trigraphs

De forma predeterminada, la compatibilidad con los trígrafos está deshabilitada. Use la opción del compilador /Zc:trigraphs para habilitar la compatibilidad con trígrafos.

Un trígrafo se compone de dos signos de interrogación consecutivos (??) seguidos de un tercer carácter único. El compilador reemplaza un trígrafo por el carácter de puntuación correspondiente. Por ejemplo, el compilador reemplaza el trígrafo ??= por el carácter # (almohadilla). Utilice los trígrafos en los archivos de código fuente de C que usen un juego de caracteres que no contenga ciertos caracteres de puntuación.

Nueva opción de optimización guiada por perfiles

PogoSafeMode es una nueva opción de optimización guiada por perfiles que permite especificar si se desea usar el modo seguro o el modo rápido al optimizar la aplicación. El modo seguro ofrece seguridad para los subprocesos, pero es más lento que el modo rápido. El modo rápido es el comportamiento predeterminado.

Nueva opción de Common Language Runtime (CLR) /clr:nostdlib

Se ha agregado una nueva opción para /clr (Compilación de Common Language Runtime). Si se incluyen versiones diferentes de las mismas bibliotecas, se produce un error de compilación. La nueva opción permite excluir las bibliotecas de CLR predeterminadas para que el programa pueda usar una determinada versión.

Nueva directiva pragma detect_mistmatch

La directiva pragma detect_mismatch permite colocar una etiqueta en los archivos que se compara con otras etiquetas con el mismo nombre. Si hay varios valores para el mismo nombre, el vinculador emite un error.

Intrínsecos para XOP, FMA4 y LWP

Se han agregado nuevas funciones intrínsecas para admitir las tecnologías de procesador Intrínsecos XOP agregados para Visual Studio 2010 SP1, Intrínsecos FMA4 agregados para Visual Studio 2010 SP1 y Intrínsecos LWP agregados para Visual Studio 2010 SP1. Use __cpuid, __cpuidex para determinar qué tecnologías de procesador se admiten en un equipo concreto.

Sistema de compilación y proyectos de Visual C++

MSBuild

Las soluciones y los proyectos de Visual C++ ahora se compilan con MSBuild.exe, que sustituye a VCBuild.exe. MSBuild es la misma herramienta de compilación flexible, extensible y basada en XML que se usa en otros lenguajes y tipos de proyecto de Visual Studio. Debido a este cambio, los archivos de proyecto de Visual C++ usan ahora un formato de archivo XML y tienen la extensión de nombre de archivo .vcxproj. Los archivos de proyecto de Visual C++ de las versiones anteriores a Visual Studio se convierten automáticamente al nuevo formato de archivo. Para obtener más información, vea MSBuild (Visual C++).

Directorios de VC++

El valor Directorios de VC++ se encuentra ahora en dos ubicaciones. Use las páginas de propiedades del proyecto para establecer los valores de los directorios VC++ de cada proyecto. Utilice el Administrador de propiedades y una hoja de propiedades para establecer los valores globales de los directorios VC++ de cada configuración.

Dependencias entre proyectos

En versiones anteriores, las dependencias definidas entre los proyectos se almacenaban en el archivo de solución. Cuando estas soluciones se convierten al nuevo formato de archivo del proyecto, las dependencias se convierten en referencias entre proyectos. Este cambio puede afectar a las aplicaciones, ya que los conceptos de las dependencias de la solución y de las referencias entre proyectos son diferentes.

Variables de entorno y macros

La nueva macro _ITERATOR_DEBUG_LEVEL invoca la compatibilidad de depuración para los iteradores. Use esta macro en lugar de las macros _SECURE_SCL y _HAS_ITERATOR_DEBUGGING antiguas.

Bibliotecas de Visual C++

Bibliotecas de Runtime de simultaneidad

El marco de trabajo Runtime de simultaneidad admite aplicaciones y componentes que se ejecutan simultáneamente, y es el marco de trabajo para programar aplicaciones simultáneas en Visual C++. Para admitir la programación de aplicaciones simultáneas, Parallel Patterns Library (PPL) proporciona contenedores y algoritmos de propósito general para realizar un paralelismo más específico. Biblioteca de agentes asincrónicos proporciona un modelo de programación basado en actores e interfaces de paso de mensajes para las tareas genéricas de flujo de datos y canalización.

Biblioteca estándar de C++

En la lista siguiente se describen muchos de los cambios realizados en la Biblioteca estándar de C++.

  • La nueva característica referencia rvalue del lenguaje C++ se ha usado para implementar semántica de transferencia de recursos y reenvío directo para muchas funciones de la Biblioteca de plantillas estándar. La semántica de transferencia de recursos y el reenvío directo mejoran considerablemente el rendimiento de operaciones que asignan variables o parámetros.

  • Las referencias rvalue también se emplean para implementar la nueva clase unique_ptr, que es un tipo de puntero inteligente más seguro que la clase auto_ptr. La clase unique_ptr se puede mover pero no se puede copiar, implementa semántica estricta de propiedad sin afectar a la seguridad y funciona correctamente con contenedores que tienen en cuenta las referencias rvalue. La clase auto_ptr está desusada.

  • Se han agregado quince funciones nuevas, como find_if_not, copy_if e is_sorted, al encabezado <algorithm>.

  • En el encabezado <memory>, la nueva función make_shared es una manera cómoda, robusta y eficaz de convertir un puntero compartido en un objeto al mismo tiempo que se construye el objeto.

  • El encabezado <forward_list> admite listas con vinculación única.

  • Las nuevas funciones miembro cbegin, cend, crbegin y crend proporcionan un const_iterator que avanza o retrocede en un contenedor.

  • El encabezado <system_error> y las plantillas relacionadas admiten el procesamiento de errores del sistema de bajo nivel.

  • Se pueden usar miembros de la clase exception_ptr para transportar excepciones entre subprocesos.

  • El encabezado <codecvt> admite convertir varias codificaciones de caracteres Unicode a otras codificaciones diferentes.

  • El encabezado <allocators> define varias plantillas que ayudan a asignar y liberar bloques de memoria para contenedores basados en nodos.

  • Hay numerosas actualizaciones al encabezado <random>.

Biblioteca MFC (Microsoft Foundation Class)

Características de Windows 7

MFC admite muchas características de Windows 7, como la interfaz de usuario (IU) de la cinta de opciones, la barra de tareas, Jump Lists, miniaturas con pestañas, vistas previas en miniatura, la barra de progreso, superposición de iconos e indización de búsqueda. Puesto que MFC admite automáticamente muchas características de Windows 7, quizás no sea necesario modificar la aplicación existente. Para admitir otras características de aplicaciones nuevas, use el Asistente para aplicaciones MFC con el fin de especificar la funcionalidad que desea usar.

Reconocimiento de multitoque

MFC admite aplicaciones que tienen una interfaz de usuario multitoque, como las aplicaciones escritas para el sistema operativo Microsoft Surface. Una aplicación multitoque puede administrar mensajes de toque y mensajes de gestos de Windows, que son combinaciones de mensajes de toque. Basta registrar la aplicación para eventos de toque y de gestos, y el sistema operativo enrutará los eventos multitoque a los controladores de eventos.

Reconocimiento de configuración elevada de ppp

De forma predeterminada, ahora las aplicaciones MFC reconocen la configuración elevada de ppp. Si una aplicación reconoce la configuración elevada de ppp (puntos por pulgada), el sistema operativo puede escalar las ventanas, el texto y otros elementos de la interfaz de usuario para adaptarlos a la resolución de pantalla actual. Esto significa que es más probable que una imagen escalada se presente correctamente, y no se recorte o se pixele.

Administrador de reinicio

El Administrador de reinicio guarda automáticamente los documentos y reinicia la aplicación si esta se cierra o se reinicia de forma inesperada. Por ejemplo, puede usar el Administrador de reinicio para iniciar la aplicación cuando esta se cierra tras una actualización automática. Para obtener más información sobre cómo configurar la aplicación para usar el administrador de reinicio, vea Cómo: Agregar compatibilidad con el Administrador de reinicio.

CTaskDialog

La clase CTaskDialog se puede usar en lugar del cuadro de mensaje estándar AfxMessageBox. En la clase CTaskDialog se muestra y se recopila más información que la que aparece en el cuadro de mensaje estándar.

Biblioteca SafeInt

La nueva biblioteca SafeInt realiza operaciones aritméticas seguras que tienen en cuenta el desbordamiento de enteros. Esta biblioteca también compara distintos tipos de enteros.

Muevas macros de Active Template Library (ATL)

Se han agregado nuevas macros a ATL para expandir la funcionalidad de PROP_ENTRY_TYPE y PROP_ENTRY_TYPE_EX. PROP_ENTRY_INTERFACE y PROP_ENTRY_INTERFACE_EX le permiten agregar una lista de CLSID válidos. PROP_ENTRY_INTERFACE_CALLBACK y PROP_ENTRY_INTERFACE_CALLBACK_EX le permiten especificar una función de devolución de llamada para determinar si un CLSID es válido.

Advertencias de /analyze

La mayoría de las advertencias /analyze (Análisis del código de empresa) se han quitado de las bibliotecas C Run-Time (CRT), MFC y ATL.

Compatibilidad con animación y D2D

MFC admite ahora gráficos de animación y Direct2D. La biblioteca MFC tiene varias clases y funciones de MFC nuevas para admitir esta funcionalidad. También hay dos tutoriales nuevos en los que se muestra cómo agregar un objeto D2D y un objeto de animación a un proyecto. Estos tutoriales son Tutorial: Agregar objetos D2D a un proyecto de MFC y Tutorial: Agregar animación a un proyecto de MFC.

IDE

En Visual C++ 2010, el entorno de desarrollo integrado (IDE) cuenta con importantes mejoras en cuanto a rendimiento, exactitud, escalabilidad y herramientas para ayudarle a ser productivo.

IntelliSense mejorado

Se ha rediseñado totalmente IntelliSense para Visual C++ y ahora es más rápido, más exacto y es capaz de administrar proyectos mayores. Para conseguir esta mejora, el IDE realiza una distinción entre cómo un desarrollador ve y modifica código fuente, y cómo usa el IDE la configuración de código fuente y de proyecto para compilar una solución.

Debido a esta separación de tareas, características de exploración como Vista de clases y el nuevo cuadro de diálogo Navegar a están controladas por un sistema que se basa en un nuevo archivo de base de datos de escritorio de SQL Server (.sdf) que reemplaza al anterior archivo explorador de no compilación (. ncb). Algunas características de IntelliSense como Información rápida, Finalización automática y Ayuda de parámetros analizan unidades de traducción solo cuando es necesario. Las características híbridas como la nueva ventana Jerarquía de llamadas usan una combinación de características de exploración y de características de IntelliSense.

Puesto que IntelliSense solo procesa la información que necesita en el momento, el IDE tiene más capacidad de respuesta. Además, como la información está más actualizada, las vistas y ventanas del IDE son más exactas. Por último, como la infraestructura del IDE está mejor organizada, tiene mayor capacidad y es más escalable, puede administrar proyectos mayores.

Errores de IntelliSense mejorados

El IDE detecta mejor los errores que podrían ocasionar una pérdida de IntelliSense y los subraya con una línea ondulada roja. Además, el IDE notifica los errores de IntelliSense en la ventana Lista de errores. Para mostrar el código que está produciendo el problema, haga doble clic en el error de la ventana Lista de errores.

Característica autocompletar de #include

El IDE admite la característica autocompletar de la palabra clave #include. Cuando escribe #include, el IDE crea un cuadro de lista desplegable de archivos de encabezado válidos. Si sigue escribiendo un nombre de archivo, el IDE filtra la lista en función de la entrada. En cualquier momento, puede seleccionar en la lista el archivo que desea incluir. De este modo, puede incluir rápidamente los archivos sin necesidad de conocer su nombre de archivo exacto.

El cuadro de diálogo Navegar a permite buscar todos los símbolos y archivos del proyecto que coinciden con una cadena especificada. Los resultados de la búsqueda se revisan inmediatamente a medida que escribe más caracteres en la cadena de búsqueda. El campo de comentarios Resultados indica el número de elementos encontrados y ayuda a decidir si se debe restringir más la búsqueda. Los campos de comentarios Tipo/Ámbito, Ubicación y Vista previa ayudan a eliminar la ambigüedad entre elementos que tienen nombres similares. Además, puede extender esta característica para otros lenguajes de programación.

Depurar y generar perfiles en paralelo

El depurador de Visual Studio reconoce el Runtime de simultaneidad y ayuda a solucionar problemas de aplicaciones con procesamiento en paralelo. Puede usar la nueva herramienta de generación de perfiles de simultaneidad para visualizar el comportamiento global de la aplicación. Además, se pueden usar nuevas ventanas de herramientas para visualizar el estado de las tareas y sus pilas de llamadas.

Diseñador de la cinta de opciones

El Diseñador de la cinta de opciones es un editor gráfico que permite crear y modificar la interfaz de usuario de una cinta de MFC. La interfaz de usuario final de la cinta se representa mediante un archivo de recursos basado en XML (.mfcribbon-ms). Para las aplicaciones existentes, puede capturar la interfaz de usuario de la cinta actual agregando temporalmente unas líneas de código e invocando después el Diseñador de la cinta de opciones. Una vez creado el archivo de recursos de la cinta, se puede reemplazar el código de la interfaz de usuario escrito a mano con algunas instrucciones que cargan el recurso de la cinta.

Jerarquía de llamadas

La ventana Jerarquía de llamadas permite navegar a todas las funciones llamadas por una función determinada o a todas las funciones que llaman a una función concreta.

Herramientas

Asistente para clases MFC

Visual C++ 2010 vuelve a traer la reconocida herramienta Asistente para clases MFC. El Asistente para clases MFC ofrece una forma cómoda de agregar clases, mensajes y variables a un proyecto sin tener que modificar manualmente conjuntos de archivos de código fuente.

Asistente para controles ATL

El Asistente para controles ATL ya no rellena automáticamente el campo ProgID. Si un control ATL no tiene ProgID, otras herramientas no pueden trabajar con él. Un ejemplo de una herramienta que requiere que los controles tengan ProgID es el cuadro de diálogo Insertar control ActiveX. Para obtener más información sobre el cuadro de diálogo, vea Insertar control ActiveX (Cuadro de diálogo).

Referencia de Microsoft Macro Assembler

La adición del tipo de datos YMMWORD es compatible con los operandos multimedia de 256 bits que se incluyen en las instrucciones que están incluidos en las instrucciones de AVX (Advanced Vector Extensions) de Intel.

Vea también

Conceptos

Cambios importantes en Visual C++

Otros recursos

Introducción a Visual C++ 2010