standard - ¿Cuáles son las nuevas características en C++ 17?



estándar iso iec de c++ (1)

Características del lenguaje:

Plantillas y Código Genérico

Lambda

Atributos

Limpieza de sintaxis

Limpiador de retorno múltiple y control de flujo

  • Enlaces estructurados

    • Básicamente, std::tie primera clase con auto
    • Ejemplo:
      • const auto [it, inserted] = map.insert( {"foo", bar} );
      • Crea variables e inserted con el tipo deducido del pair que map::insert devuelve.
    • Funciona con tuple / pair-likes & std::array sy estructuras relativamente planas
    • Enlaces estructurados realmente nombrados en estándar
  • if (init; condition) y switch (init; condition)

    • if (const auto [it, inserted] = map.insert( {"foo", bar} ); inserted)
    • Extiende el if(decl) a casos donde decl no es convertible a bool de manera sensata.
  • Generalización basada en rango para bucles

    • Parece ser principalmente compatible con centinelas o iteradores finales que no son del mismo tipo que los iteradores iniciales, lo que ayuda con bucles terminados en nulo y similares.
  • si constexpr

    • Característica muy solicitada para simplificar el código casi genérico.

Misceláneos

Adiciones de la biblioteca:

Tipos de datos

Invocar cosas

Sistema de archivos TS v1

Nuevos algoritmos

  • for_each_n

  • reduce

  • transform_reduce

  • exclusive_scan

  • inclusive_scan

  • transform_exclusive_scan

  • transform_inclusive_scan

  • Agregado para propósitos de enhebrado, expuesto incluso si no los está utilizando enhebrado

Enhebrar

(partes de) std::apply no cubiertos arriba o abajo

Mejoras de contenedores

Cambios de puntero inteligente

Otras mejoras de tipo de datos estándar:

Misceláneos

Rasgos

Obsoleto

Isocpp.org tiene una lista independiente de cambios desde C ++ 14; ha sido parcialmente saqueado.

Naturalmente, el trabajo de TS continúa en paralelo, por lo que hay algunos TS que aún no están maduros y tendrán que esperar a la próxima iteración. El objetivo para la próxima iteración es C ++ 20 como se planificó previamente, no C ++ 19 como algunos rumores implican. Se ha evitado C ++ 1O.

Lista inicial tomada de esta publicación de reddit y esta publicación de reddit , con enlaces agregados a través de google o desde la página isocpp.org anterior.

Entradas adicionales saqueadas de la lista de pruebas SD-6 características SD-6 .

La lista de características de clang y la lista de características de la library son las siguientes en ser saqueadas. Esto no parece ser confiable, ya que es C ++ 1z, no C ++ 17.

Estas diapositivas tenían algunas características que faltaban en otros lugares.

Si bien no se preguntó "qué se eliminó", aquí hay una breve lista de algunas cosas (¿en su mayoría? Obsoletas anteriormente) que se eliminan en C ++ 17 de C ++:

Remoto:

Hubo reformulaciones. No estoy seguro si estos tienen algún impacto en el código, o si son solo limpiezas en el estándar:

Documentos aún no integrados en lo anterior:

  • P0505R0 (constexpr chrono)

  • P0418R2 (ajustes atómicos)

  • P0512R0 (ajustes de deducción de argumentos de plantilla)

  • P0490R0 (ajustes de enlace estructurado)

  • P0513R0 (cambia a std::hash )

  • P0502R0 (excepciones paralelas)

  • P0509R1 (actualización de restricciones en el manejo de excepciones)

  • P0012R1 (hacer que las especificaciones de excepción sean parte del sistema de tipos)

  • P0510R0 (restricciones en variantes)

  • P0504R0 (etiquetas para opcional / variante / cualquiera)

  • P0497R0 (ajustes de ptr compartidos)

  • P0508R0 (manejadores de nodo de enlaces estructurados)

  • P0521R0 (¿cuenta de uso de puntero compartido y cambios únicos?)

Cambios de especificaciones:

Referencia adicional:

C ++ 17 ahora está completo, por lo que es poco probable que experimente grandes cambios. Se presentaron cientos de propuestas para C ++ 17.

¿Cuáles de esas características se agregaron a C ++ en C ++ 17?

Cuando se utiliza un compilador de C ++ que admite "C ++ 1z", ¿cuáles de esas características estarán disponibles cuando el compilador se actualice a C ++ 17?





c++17