Top Qs
Línea de tiempo
Chat
Contexto
C++20
De Wikipedia, la enciclopedia libre
Remove ads
El lenguaje de programación C++ está estandarizado por ISO/IEC, quienes publican una revisión cada 3 años desde 2011. C++20 es el nombre de la revisión del año 2020, que sigue a C++17.[1] La próxima revisión será C++23.
El estándar quedó técnicamente concluido por WG21 en la reunión en Praga en febrero de 2020[2][3] y pasó la aprobación final el 4 de septiembre de 2020.[4][5][6] En octubre de 2020 se encontraba en la etapa de trabajo editorial final.
C++20 añade más características importantes que C++14 o C++17.[7] Abajo se listan algunas de estas características.[8]
Remove ads
Características nuevas
Resumir
Contexto
C++20 introdujo muchas características nuevas, siendo la versión que más cambios introdujo en el lenguaje. Las siguientes listas sólo mencionan algunas de estas características. El artículo Descripción de las nuevas características de C++20 profundiza en su descripción.
Principales novedades
De la multitud de cambios introducidos, cuatro características largamente esperadas y potencialmente transformadoras, conocidas como the big four,[9] se destacan sobre el resto:
- conceptos[10][11]
- especificaciones de tipos y clases aceptados en plantillas
- módulos[12]
- alternativa moderna al #include
- corrutinas[13]
- generalización de la idea de función, que se puede pausar e implementar generadores
- rangos
- unificación de los contenedores STL con funciones generales de acceso, filtrado y manipulación de datos
Estas características nuevas se repiten en las siguientes listas más completas.
Lenguaje
Novedades en el lenguaje:
- conceptos[10][11]
- módulos[12]
- inicializadores designados[12][14] (basado en la característica de C99, que además es una extensión común de G++)[14]
[=, this]
como captura lambda[15]- plantillas (templates) en lambdas[16]
- comparación de tres sentidos con
operator <=>
- una nueva inicialización de variables dentro de un range-based
for
[17] - lambdas en contextos no evaluados[18][19]
- lambdas sin estado asignables con constructores por defecto[20]
- admite expansiones de paquete en una captura lambda init-capture[21]
- strings literales como parámetros de plantilla[22]
- se retira la necesidad de
typename
en ciertas circunstancias[23] - nuevos atributos estándares
[[no_unique_address]]
,[[likely]]
y[[unlikely]]
[24][25] constexpr
expandido a varios casos[26][27][28][29][30]- funciones inmediatas utilizan la nueva palabra clave
consteval
[31] - enteros con signo ahora defidos en complemento a dos (el desbordamiento sigue siendo comportamiento indefinido)[32]
- modelo de memoria revisado[33]
- mejoras en structured bindings (interacción con capturas de lambda, duración de almacenamiento estático y local de hilo)[34][35]
- corrutinas[13]
using
en enums[36]- nueva palabra clave
constinit
[37]
Bibliotecas
Novedades en la biblioteca estándar:
- rangos[38]
std::make_shared
ystd::allocate_shared
para arrays[39]- smart pointers atómicos (como
std::atomic<shared_ptr<T>>
andstd::atomic<weak_ptr<T>>
)[40] std::to_address
para convertir un puntero a un puntero crudo[41]- agregados de calendario y zonas horarias en
<chrono>
[42] std::span
proporciona una vista de un array contiguo (similar astd::string_view
pero mutable)[43]<version>
[44]std::bit_cast<>
para el casting de objetos, menos verborrágico quememcpy()
[45]- macros para evaluar características[46]
- varios constexpr[47]
- inicialización por defecto para la creación de smart pointers[48]
- nuevo método
std::map::contains
[49] - operaciones de bit, como cuenta de ceros o unos iniciales o finales,[50] operaciones log2,[51][52][53]
std::popcount
Obsolescencia
Nuevas palabras clave
Algunas palabras clave nuevas en C++20:
operator <=>
concept
char8_t
explicit
- asociadas a const
constinit
consteval
- asociadas a corrutinas
co_await
co_return
co_yield
- asociadas a módulos
import
module
requires
export
- atributos[56]
[[likely]]
[[unlikely]]
[[no_unique_address]]
Remove ads
Características publicadas como Especificaciones Técnicas
Aquellas partes mayores que implican un gran trabajo de especificación se llevan a cabo de forma desacoplada de las versiones de C++ , y manejan su propio calendario. Estos trabajos se conocen como "Especificaciones Técnicas" abreviados TS (Technical Specification).
- Paralelismo: Parallelism TS v2 (incluyendo bloques de tarea)[57][58]
- Redes: Networking TS v1[59]
- Reflexión: Reflection TS v1[60]
Se espera que formen parte de C++23.
Remove ads
Características reprogramadas para futuros estándares
Una de las etapas en la preparación de cada versión consiste en determinar qué características solicitadas se incluyen en la versión actual, y cuáles se postergan.
La postergación de una característica no asegura su inclusión en la versión siguiente ni garantiza que alguna vez sea lanzada.
Una característica postergada sigue recibiendo atención, y su inclusión en una versión depende, entre otras cosas, del estado de avance de su especificación.
Entre las características reprogramadas es común encontrar aquellas que cuentan con su propia especificación técnica (lo que implica que siguen su propio calendario de especificación).
Algunas características reprogramadasː
Soporte por compiladores
En el pasado los compiladores comenzaban a soportar parcialmente una versión de C++ a partir del momento de su publicación. En la actualidad los desarrolladores de compiladores importantes se anticipan al estándar final implementando soporte experimental para varias características a partir de los borradores.
- Clang tiene soporte parcial C++20 habilitado con la opción -std=c++20 (versión 10 o posterior) o -std=c++2un (versión 9 y anteriores).[70]
- GCC Añadió soporte parcial y experimental de C++20 en 2017 en su versión 8 por medio de la opción -std=c++2a.[71] Como Clang, GCC reemplazó esta opción con -std=c++20 en su versión 10. También tiene una opción para habilitar extensiones GNU junto con el soporte experimental de C++20, -std=gnu++20.[72]
- Microsoft Visual Studio soporta algunas características de C++20 a través de la opción std:c++latest.
Remove ads
Véase también
Referencias
Enlaces externos
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads