C++
El estándar ISO C ++
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:
- Próximamente (a veces denominado C ++ 20 o C ++ 2a): borrador de trabajo actual ( versión HTML )
- Propuesta (a veces denominada C ++ 17 o C ++ 1z): borrador de trabajo de marzo de 2017 N4659 .
- C ++ 14 (a veces denominado C ++ 1y): noviembre de 2014, borrador de trabajo N4296
- C ++ 11 (a veces denominado C ++ 0x): febrero de 2011, borrador de trabajo N3242
- C ++ 03
- C ++ 98
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
- auto
- decltype
- Declaración de rango de
- Listas de inicialización
- Sintaxis de inicialización uniforme y semántica.
- Referencias de valores y semánticas de movimiento.
- Lambdas
- noexcept para prevenir la propagación de excepciones
- constexpr
- nullptr - un puntero nulo literal
- Copiar y volver a emitir excepciones.
- Espacios de nombres en línea
- Literales definidos por el usuario
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
- Modelo de memoria concurrente
- Inicialización dinámica y destrucción con concurrencia.
- Almacenamiento de hilo local
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
- Trapos
- Exclusión mutua
- Cabellos
- Variables de condicion
- Atomística
- Futuros y promesas
- asíncrono
- Abandonando un proceso
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
- Literales binarios
- Deducción del tipo de retorno generalizado.
- decltype (auto)
- Capturas de lambda generalizadas
- Lambdas genericas
- Plantillas variables
-
constexpr
extendido - El atributo
[[deprecated]]
- Separadores de dígitos
Extensiones de biblioteca
- Bloqueo compartido
- Literales definidos por el usuario para
std::
types -
std::make_unique
- Tipo de transformación
_t
alias - Abordar las tuplas por tipo (por ejemplo,
get<string>(t)
) - Funciones de operador transparentes (por ejemplo,
greater<>(x)
) -
std::quoted
En desuso / Eliminado
-
std::gets
fue desaprobado en C ++ 11 y eliminado de C ++ 14 -
std::random_shuffle
está en desuso
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
- Expresiones Fold
- declarando argumentos de plantilla que no son de tipo con
auto
- Copia garantizada elision
- Deducción de parámetros de plantilla para constructores.
- Enlaces estructurados
- Espacios de nombres anidados compactos
- Nuevos atributos:
[[fallthrough]]
,[[nodiscard]]
,[[maybe_unused]]
- Mensaje predeterminado para
static_assert
- Inicializadores en
if
yswitch
- Variables en linea
-
if constexpr
- Garantías de orden de expresión.
- Asignación de memoria dinámica para datos sobre alineados
Extensiones de biblioteca
-
std::optional
-
std::variant
-
std::string_view
-
merge()
yextract()
para contenedores asociativos - Una biblioteca de sistema de archivos con el encabezado
<filesystem>
. - Versiones paralelas de la mayoría de los algoritmos estándar (en el encabezado
<algorithm>
). - Adición de funciones matemáticas especiales en el encabezado
<cmath>
. - Mover nodos entre map <>, unordered_map <>, set <> y unordered_set <>
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.