C ++ 11
Hay muchas diferencias. Enumerar todas las diferencias en C ++ 11 es probablemente un documento de 30-60 páginas, que es un poco largo para una respuesta de Quora. Algunas de las diferencias son fáciles de entender para un principiante, y otras son bastante esotéricas. Tampoco todos encajan perfectamente en un solo tema general, excepto tal vez que C ++ 11 elimina muchas de las esquinas ásperas de C ++ 03.
Aquí hay algunos puntos destacados:
- Puede especificar el tipo de una variable a partir del valor que le asigne. Por ejemplo
auto i = 3;
haréi
un número entero. Esto es importante cuando el tipo es complejo; considerafor( auto i = vec.begin(); i != vec.end(); ++i )
, que es bastante bueno, y compáralo confor( std::vector< std::set >::const_iterator i = vec.begin(); i != vec.end(); ++i )
, que es el código de C ++ 03 equivalente. - Puede especificar si desea anular una función virtual utilizando la palabra clave de
override
; también puede especificar que pretende que todas las sustituciones secundarias futuras de una función virtual en particular sean ilegales con la palabra clavefinal
. Es común anular incorrectamente, y esto permite que el compilador le diga si está cometiendo un error. - Puede forzar o suprimir explícitamente la generación predeterminada de constructores de copia, constructores predeterminados, constructores de movimiento, destructores y operadores de asignación. La sintaxis para hacer que una clase no pueda copiarse ahora tiene sentido.
- Ahora puedes crear lambdas , que son algo así como funciones anónimas. Las Lambdas se pueden crear dentro de una función regular, y pueden capturar y usar variables locales del contexto en el que se crean.
- Hay una nueva forma de bucle para iterar a través de contenedores . Se ve así:
for( auto i : container )
. Funcionará tanto con los contenedores incorporados como con los contenedores que fabrique, siempre que sus contenedores cumplan con ciertos requisitos. - Hay algunos punteros nuevos gestionados . El
auto_ptr
, que facilitó la creación de bloqueos, ha sido reemplazado porunique_ptr
, que es mucho más seguro. También hay un nuevoshared_ptr
para aquellos que desean escribir código similar a Java sin un recolector de basura. - Ahora el subprocesamiento está integrado en el lenguaje C ++ . No es necesario agregar una biblioteca externa.
- Ahora puede mover datos cuando usa un constructor o un operador de asignación, en lugar de copiarlos. Esto es mucho más rápido. El concepto de una referencia de valor se introdujo para hacer esto posible.
- Puede inicializar un contenedor con una lista en línea , llamada lista de inicialización. Por ejemplo,
std::vector v = { 1, 2, 3, 4 };
- Los constructores pueden llamar a otro constructor en la misma clase. Esto hace que sea fácil evitar el código repetitivo cuando desea tener muchas firmas de constructores.
- El puntero nulo ahora se llama nullptr . En realidad, es un tipo de puntero, y nunca se confundirá con un entero; NULL tiene problemas con esto.
- Las plantillas Variadic permiten que las plantillas tengan un número variable de parámetros. Como si las plantillas no estuvieran lo suficientemente locas.
Hay muchas más cosas; esto cubre muchos de los aspectos más destacados, pero también hay un montón de características adicionales … Puede leer la lista de Bjarne Stroustrup en: C ++ 11 Preguntas frecuentes. Wikipedia también tiene una buena lista: C ++ 11.
C ++ 14
Los cambios para C ++ 14, en comparación, son bastante modestos. Se espera la próxima revisión “grande” en 2017. Sin embargo, todavía hay algunos cambios interesantes:
- ¿Cuál es la mejor manera de aprender conceptos matemáticos rápidamente y aplicarlos sin mucha práctica?
- ¿Cuál es la mejor manera de manejar un fanático?
- ¿Cuál es la mejor manera de aprender sobre programación?
- ¿Qué son los buenos libros para aprender a dibujar perspectivas y retratos?
- ¿Cuál es la mejor manera de aprender Python en un período de más o menos un mes?
- Ahora también puedes usar
auto
para tipos de devolución; Mientras todas sus expresiones de retorno tengan tipos consistentes, funcionará. - Puedes usar
auto
para los parámetros de lambda. Esto es algo así como crear una lambda con plantilla. - Se ha agregado un mecanismo para desaprobar el código; puede pegar [[en desuso]] delante del nombre de la clase. Los compiladores pueden hacer con esto lo que quieran.
- Puedes usar números binarios ahora, si quieres.
0b1001
es otra forma de escribir9
. Esto es útil si no eres muy bueno en notación hexadecimal.
En su mayoría son unos pocos ajustes menores para generalizar algunas de las nuevas ideas en C ++ 11, y para limpiar algunos puntos difíciles. Esta tampoco es una lista completa, pero cubre algunos aspectos destacados. La mayoría de estos se tomaron de este artículo del Dr. Dobb: El estándar C ++ 14: Lo que usted necesita saber.