sirven que principales para librerias lenguaje las funciones dev descargar contenido clases c++ c++11 backwards-compatibility constexpr c++14

que - librerias de dev c++ y sus funciones



¿Qué partes de la biblioteca estándar C++ 14 podrían ser y qué partes se harán constestables? (2)

¿Qué partes de la Biblioteca estándar ahora se marcarán constexpr?

Desde el borrador que he analizado para C ++ 14, N3690 , lo siguiente será cambiado a constexpr hasta el momento (en comparación con el estándar C ++ 11) †:

  • El constructor predeterminado de std::error_category
  • std::forward
  • std::move
  • std::move_if_noexcept
  • Todas las comparaciones de operadores de std::pair
  • std::get para std::pair y std::tuple .
  • std::make_tuple
  • Todas las comparaciones de operador de std::tuple
  • Todas las comparaciones de operadores de std::optional
  • Todos los constructores de std::optional (guardar para mover)
  • operator[] y size para std::bitset y otros contenedores.
  • Todas las comparaciones de operadores de std::complex

Como hice esto manualmente, puede esperar algunos errores :(

Para obtener otra lista posiblemente más correcta de constexpr de constexpr , puede consultar: N3469 , N3470 y N3471

¿Qué otras partes podrían marcarse constexpr?

La mayoría de las cosas que podrían ser constexpr ( std::numeric_limits evaluation, std::tuple y std::pair constructors, etc.) ya estaban marcadas como constexpr en el estándar C ++ 11. Hubo un error en el que los puntos de tiempo de std::ratio y otros componentes no se marcaron como constexpr pero se corrigió en N3469.

Algo que se beneficiaría de las constexpr de constexpr sería std::initializer_list , que esta vez no obtuvo ninguno (y no estoy seguro si ha habido alguna propuesta para permitirlo).

¿Hay razones de compatibilidad hacia atrás para no hacerlo?

Como se trata de una extensión , la mayoría de las cosas no se romperán, ya que el código anterior aún se compilará como está y nada está ahora mal formado. Sin embargo, agregar constexpr a las cosas más antiguas que no lo tenían podría llevar a algunos resultados sorprendentes si no lo esperaba, como el ejemplo proporcionado aquí (Gracias TemplateRex)

Con las nuevas y relajadas reglas constexpr de C ++ 14 , la programación en tiempo de compilación se vuelve mucho más expresiva. Me pregunto si la biblioteca estándar también se actualizará para aprovecharla. En particular, std::initializer_list , std::pair , std::tuple , std::complex , std::bitset y std::array parecen candidatos principales para ser marcados constexpr al constexpr mayor.

Preguntas :

  • ¿ constexpr partes de la Biblioteca estándar ahora se marcarán constexpr ?
  • ¿ constexpr otras partes podrían marcarse constexpr ?
  • por ejemplo, ¿por qué las funciones de <cmath> y <algorithm> marcadas como constexpr ?
  • ¿Hay razones de compatibilidad hacia atrás para no hacerlo?

La semana pasada (23-28 de septiembre de 2013) el comité de estándares agregó constexpr a más rutinas en la biblioteca estándar.

  • forward_as_tuple
  • el método operator () de todos los operadores con nombre de comparación / lógico / bit a bit. ( less , greater , plus , minus , bitwise_and , logical_or , not1 - y el resto)

@TemplateRex: nos estamos acercando a ordenar matrices en tiempo de compilación.

Sin embargo, también resolvimos el problema de LWG 2013, afirmando que los implementadores de bibliotecas estándar NO tienen la libertad de realizar llamadas que no están definidas en el estándar como constexpr como constexpr , ya que ese tipo de diferencia entre implementaciones podría cambiar el comportamiento de algún código.