C++17

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda

C++17 es la versión más reciente del estándar del lenguaje de programación C++. La especificación final de C++17 fue aprobada por el comité de estandarización de C++ (WG21) de la Organización Internacional de Normalización (ISO) el 6 de septiembre de 2017 y está pendiente de la publicación oficial definitiva por parte de ISO.[1]​ C++17 reemplaza a la anterior especificación C++14 publicada en el año 2014. El nombre sigue la tradición de denominar a las versiones del lenguaje C++ a partir de la fecha de publicación de la especificación. Antes de conocerse la fecha exacta de su publicación, el borrador del estándar era informalmente conocido como C++1z para distinguirlo de C++11 (C++1x) y C++14 (C++1y). La próxima revisión de ésta especificación se denominará C++20.[2][1]

Nuevas características[editar]

Dado que la especificación para C++17 apenas comienza, la siguiente lista es sólo un comienzo, se añadirán muchas características en los próximos años.[3]

  • La adición de un mensaje de texto por defecto para static_assert.[4]
  • La adición de std::string_view, una referencia no propietaria a una secuencia de caracteres o sectores, que es de sólo lectura. [5]
  • Permite typename en una parámetro de una plantilla.[8]
  • Nuevas reglas para la deducción auto desde la lista de inicialización arriostrada.[9][10]
  • std::uncaught_exceptions, como reemplazo de std::uncaught_exception.[11][12]
  • Definición de espacio de nombres anidados.[13][10]
  • Atributos para espacios de nombres y enumeradores.[14][12]
  • Constante evaluación para todos los argumentos de las plantillas sin tipo.[16][12]
  • Nuevas funciones de inserción para std::map y std::unordered_map.[18][19]
  • Acceso al contenedor Uniforme.[20][19]
  • Definición de "Iteradores contiguos".[21][19]
  • La eliminación de algunos tipos y funciones en desuso como std::auto_ptr, std::random_shuffle o adaptadores de función antiguas.[22][10]
  • Conceptos, proporcionando "especificación y verificación de las restricciones sobre los argumentos de plantilla".[23][24]
  • Sintaxis de llamada unificada.[25][24]
  • Una biblioteca de sistema de archivos basado en boost::filesystem.
  • Versiones paralelas de algoritmos STL. [26]
  • Funciones especiales de matemática adicional. [27]
  • La mayoría de las librerías de fundamentos TS I (ejemplos: std::optional, std::any). [28][29]
  • std::variant, un contenedor de unión de tipo seguro.
  • Un tiempo de compilación estático if (condicional) con el formulario if constexpr(expression).
  • Enlaces Estructurados, lo que permite auto [a, b] = getTwoReturnValues();.
  • Inicializadores en las sentencias if y switch. [30]
  • Elisión de copia garantizada por los compiladores en algunos casos.
  • Algunas extensiones en asignación alineada de memoria.
  • Plantilla de deducción de constructores, permitiendo pair(5.0, false) en vez de pair<double,bool>(5.0, false).
  • Variables en línea, que permite la definición de variables en archivos de encabezado.

Véase también[editar]

Referencias[editar]

  1. a b Herb Sutter (6 de septiembre de 2017). «C++17 is formally approved» (en inglés). Consultado el 7 de septiembre de 2017. 
  2. Herb Sutter (30 de junio de 2016). «Trip report: Summer ISO C++ standards meeting (Oulu)» (en inglés). Consultado el 7 de septiembre de 2017. 
  3. «Estado de la implementación C++1z». 
  4. «N3928: Extensión static_assert, v2 (Walter E. Brown)». 
  5. «std::basic_string_view - cppreference.com». en.cppreference.com. Consultado el 23 de junio de 2016. 
  6. «N3981: ¿Eliminando trígrafos? (Richard Smith)». 6 de mayo de 2014. 
  7. Comentario IBM sobre el preparado para un trígrafo adverso futuro en C++17, documento IBM N4210, 10 de octubre de 2014. Autores: Michael Wong, Hubert Tong, Rajan Bhakta, Derek Inglis
  8. «N4051: Permite typename en un parámetro de una plantilla (Richard Smith)». 
  9. «N3922: Nuevas reglas para la deducción auto desde la lista de inicialización arriostrada (James Dennett)». 
  10. a b c «Actualizaciones a mi reporte de viaje». 
  11. «N4259: Texto para std::uncaught_exceptions (Herb Sutter)». 
  12. a b c d e «Nuevos documentos de lenguaje núcleo adoptadas para C++17». 
  13. «N4230: Definición de espacio de nombres anidados (Robert Kawulak, Andrew Tomazos)». 
  14. «N4266: Atributos para espacios de nombres y enumeradores (Richard Smith)». 
  15. «N4267: Adición de caracteres literales u8 (Richard Smith)». 
  16. «N4268: Constante evaluación para todos los argumentos de las plantillas sin tipo (Richard Smith)». 
  17. «N4295: Expresiones plegables (Andrew Sutton, Richard Smith)». 
  18. «N4279: Mejora de la interfaz de inserción para los mapas de clave única (Thomas Köppe)». 
  19. a b c «Nuevos documentos de la biblioteca estándar adoptados para C++17». 
  20. «N4280: Non-member size() and more (Riccardo Marcangelo)». 
  21. «N4284: Iteradores contiguos (Jens Maurer)». 
  22. «N4190: Removiendo auto_ptr, random_shuffle(), y antiguos <functional> Stuff (Stephan T. Lavavej)». 
  23. «N4361: Proyecto de trabajo, entensiones C++ para conceptos (Andrew Sutton)». 
  24. a b «Stroustrup: Reflexiones sobre C++17 - Una entrevista (Sergio De Simone)». 
  25. «Sintaxis de llamada unificada: x.f(y) and f(x,y) (Bjarne Stroustrup, Herb Sutter)». 
  26. «El Paralelismo TS debe ser estandarizado (inglés)». 
  27. «Funciones especiales matemáticas para C++17, v5 (en inglés)». 
  28. «Adoptar los componentes de las librerías de fundamentos V1 TS para C++17 R1 (en inglés)». 
  29. «Estado actual». 
  30. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0305r0.html