Buscar..


Introducción

En 1998, hubo una primera publicación de la norma que convierte a C ++ en un lenguaje estandarizado internamente. A partir de ese momento, C ++ ha evolucionado dando como resultado diferentes dialectos de C ++. En esta página, puede encontrar una descripción general de todos los diferentes estándares y sus cambios en comparación con la versión anterior. Los detalles sobre cómo usar estas funciones se describen en páginas más especializadas.

Observaciones

Cuando se menciona C ++, a menudo se hace referencia al "Estándar". Pero, ¿qué es exactamente ese estándar?

C ++ tiene una larga historia. Comenzó como un pequeño proyecto de Bjarne Stroustrup dentro de los Laboratorios Bell, a principios de los 90 se había vuelto bastante popular. Varias compañías creaban compiladores de C ++ para que los usuarios pudieran ejecutar sus compiladores de C ++ en una amplia gama de computadoras. Pero para facilitar esto, todos estos compiladores que compiten deberían compartir una sola definición del lenguaje.

En ese momento, el lenguaje C se había estandarizado con éxito. Esto significa que se escribió una descripción formal del lenguaje. Este se presentó al American National Standards Institute (ANSI), que abrió el documento para su revisión y posteriormente lo publicó en 1989. Un año después, la Organización Internacional de Estándares (ya que tendría diferentes siglas en diferentes idiomas, eligieron un formulario). , ISO, derivado de las islas griegas, que significa igual.) Adoptó la norma estadounidense como norma internacional.

Para C ++, estaba claro desde el principio que había un interés internacional. Se inició un grupo de trabajo dentro de ISO (conocido como WG21, dentro del Subcomité 22). Este grupo de trabajo elaboró ​​un primer estándar alrededor de 1995. Pero como sabemos los programadores, no hay nada más peligroso para una entrega planificada que las funciones de última hora, y eso también le sucedió a C ++. En 1995, surgió una nueva biblioteca llamada STL, y las personas que trabajan en WG21 decidieron agregar una versión reducida al estándar borrador de C ++. Naturalmente, esto hizo que los plazos se perdieran y solo 3 años después el documento se convirtió en definitivo. ISO es una organización muy formal, por lo que el Estándar C ++ fue bautizado con el nombre poco comercial de ISO / IEC 14882. Como los estándares pueden actualizarse, esta versión exacta se conoció como 14882: 1998.

Y de hecho hubo una demanda para actualizar el Estándar. El estándar es un documento muy grueso, cuyo objetivo es describir exactamente cómo deberían funcionar los compiladores de C ++. Incluso vale la pena arreglar una pequeña ambigüedad, por lo que para 2003 se lanzó una actualización como 14882: 2003. Sin embargo, esto no agregó ninguna característica a C ++; Las nuevas características fueron programadas para la segunda actualización.

De manera informal, esta segunda actualización se conoció como C ++ 0x, porque no se sabía si duraría hasta 2008 o 2009. Bueno, esa versión también tuvo un ligero retraso, por lo que se convirtió en 14882: 2011.

Por suerte, WG21 decidió no dejar que eso volviera a suceder. C ++ 11 fue bien recibido y permitió un renovado interés en C ++. Entonces, para mantener el impulso, la tercera actualización pasó de la planificación a la publicación en 3 años, para convertirse en 14882: 2014.

El trabajo no se detuvo allí, tampoco. Se ha propuesto el estándar C ++ 17 y se ha iniciado el trabajo para C ++ 20.

Borradores de trabajo actuales

Todas las normas ISO publicadas están disponibles para la venta en la tienda ISO ( http://www.iso.org ). Sin embargo, los borradores de trabajo de los estándares de C ++ están disponibles públicamente de forma gratuita.

Las diferentes versiones de la norma:

C ++ 11

El estándar C ++ 11 es una extensión importante del estándar C ++. A continuación, puede encontrar una descripción general de los cambios, ya que se han agrupado en las Preguntas frecuentes de isocpp con enlaces a documentación más detallada.

Extensiones de lenguaje

Características generales

Las clases

  • = predeterminado y = eliminar
  • Control de movimiento por defecto y copia.
  • Constructores delegantes
  • Inicializadores de miembros en clase
  • Constructores heredados
  • Anular controles: anular
  • Controles de anulación: final
  • Operadores de conversión explícita

Otros tipos

  • clase de enumeración
  • long long - un entero más largo
  • Tipos enteros extendidos
  • Sindicatos generalizados
  • POD generalizados

Plantillas

  • Plantillas externas
  • Alias ​​de plantillas
  • Plantillas variables
  • Tipos locales como argumentos de plantilla

Concurrencia

Características de varios idiomas

  • ¿Cuál es el valor de __cplusplus para C ++ 11?
  • Sintaxis de tipo de retorno de sufijo
  • Previniendo el estrechamiento
  • Corchetes de ángulo recto
  • static_assert aserciones en tiempo de compilación
  • Literales de cuerda cruda
  • Atributos
  • Alineación
  • Características C99

Extensiones de biblioteca

General

  • unique_ptr
  • shared_ptr
  • débil_ptr
  • Recolección de basura abi
  • tupla
  • Tipo de rasgos
  • función y enlace
  • Expresiones regulares
  • Utilidades de tiempo
  • Generación de números aleatorios
  • Asignadores de ámbito

Contenedores y algoritmos

  • Mejoras de algoritmos.
  • Mejoras de contenedores
  • desordenados_ * contenedores
  • std :: array
  • forward_list

Concurrencia

C ++ 14

El estándar C ++ 14 a menudo se conoce como una corrección de errores para C ++ 11. Contiene solo una lista limitada de cambios, de los cuales la mayoría son extensiones de las nuevas funciones en C ++ 11. A continuación, puede encontrar una descripción general de los cambios, ya que se han agrupado en las Preguntas frecuentes de isocpp con enlaces a documentación más detallada.

Extensiones de lenguaje

Extensiones de biblioteca

En desuso / Eliminado

C ++ 17

El estándar C ++ 17 es una característica completa y se ha propuesto para la estandarización. En los compiladores con soporte experimental para estas características, generalmente se conoce como C ++ 1z.

Extensiones de lenguaje

Extensiones de biblioteca

C ++ 03

El estándar C ++ 03 trata principalmente los informes de defectos del estándar C ++ 98. Aparte de estos defectos, solo agrega una nueva característica.

Extensiones de lenguaje

C ++ 98

C ++ 98 es la primera versión estandarizada de C ++. Como se desarrolló como una extensión de C, se agregan muchas de las características que distinguen a C ++ de C.

Extensiones de lenguaje (con respecto a C89 / C90)

  • Clases, Clases derivadas, funciones miembro virtuales, funciones miembro const.
  • Sobrecarga de funciones, Sobrecarga del operador.
  • Comentarios de una sola línea (se ha introducido en el C-languague con el estándar C99)
  • Referencias
  • nuevo y borrar
  • tipo booleano (ha sido introducido en el C-languague con el estándar C99)
  • plantillas
  • espacios de nombres
  • excepciones
  • moldes específicos

Extensiones de biblioteca

  • La biblioteca de plantillas estándar

C ++ 20

C ++ 20 es el próximo estándar de C ++, actualmente en desarrollo, basado en el estándar C ++ 17. Su progreso se puede seguir en el sitio web oficial de ISO cpp .

Las siguientes funciones son simplemente lo que se ha aceptado para la próxima versión del estándar C ++, orientado para 2020.

Extensiones de lenguaje

No se han aceptado extensiones de idioma por ahora.

Extensiones de biblioteca

No se han aceptado extensiones de biblioteca por ahora.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow