Según tengo entendido, constexpr
no es completa a diferencia de la metaprogramación de plantillas, así que creo que no son lo mismo. Entonces, la pregunta es ¿hasta qué punto el constexpr
hace que la metaprogramación de plantillas sea obsoleta?C++ 11 constexpr a la meta-programación obsoleta de la plantilla?
Respuesta
constexpr
es absolutamente Turing-completo. La recursividad está permitida. Es una forma conveniente de definir funciones que funcionan tanto en tiempo de compilación como en tiempo de ejecución. Sin embargo, las funciones constexpr
, al ser simples funciones, no pueden realizar operaciones en tipos. (A menos que utilice la metaprogramación de plantillas para definir dicha función, por supuesto).
Las plantillas de clase y constexpr
se pueden usar para contener expresiones constantes en tiempo de compilación, pero allí termina la similitud. No son redundantes y TMP no desaparecerá en el corto plazo.
Sin embargo, algunos cálculos de tiempo de compilación particularmente feos podrían reescribirse más elegantemente como funciones adecuadas.
+1 para la observación de que 'constexpr' no puede operar en tipos. –
Gracias por explicarlo tan bien ... – polapts
- 1. constexpr y advertencia de conversión obsoleta
- 2. C++ 11 - static_assert dentro de la función constexpr?
- 3. evaluación de metaprogramación de la plantilla
- 4. En C++ 11 ¿está definido sqrt como constexpr?
- 5. ¿Hay una plantilla/constexpr/C++ 11 forma de reemplazar X-macros?
- 6. ¿Es válido usar la función constexpr como argumento de plantilla?
- 7. C++ 11 `using` palabra clave: especialice el alias de la plantilla del parámetro de la plantilla
- 8. C++ 11 parámetros de plantilla de plantilla variadic
- 9. ¿Mejor introducción a la metaprogramación de plantillas C++?
- 10. constexpr y endianness
- 11. Plantilla Metaprogramación - Todavía no lo entiendo :(
- 12. C++ 11 make_pair con parámetros de plantilla especificados no compila
- 13. ¿Está completo el cálculo basado en Constexpr?
- 14. error utilizando un constexpr como un parámetro de plantilla dentro de la misma clase
- 15. es una plantilla de C++ La metaprogramación de una forma de programación funcional
- 16. Tratando con la versión obsoleta de android.text.ClipboardManager
- 17. C++ 11 forma de escribir la plantilla para elegir un tipo entero más grande?
- 18. ¿Qué es la metaprogramación?
- 19. alternativa a la versión obsoleta javax.servlet.http.HttpUtils.parseQueryString?
- 20. Making sin firmar en C++ 11
- 21. Metaprogramación C/C++ utilizando el preprocesador
- 22. ¿Por qué es la plantilla typedef un problema en C++ (no C++ 11)
- 23. ¿Plantilla especializada de C++ basada en la presencia/ausencia de un miembro de la clase?
- 24. Idioma para aprender la metaprogramación
- 25. aliviando C++ a objetivo-c/puente de cacao a través de metaprogramación?
- 26. La clase XmlValidatingReader está obsoleta
- 27. C++: la especialización parcial de clases de plantilla plantilla
- 28. Sintaxis de la plantilla de C++ Parámetros de la plantilla
- 29. C++ 11 std :: array
- 30. C++ 11 alternativa a localtime_r
'constexpr' es Turing completo (ignorando los requisitos de infinito, obviamente). –
@ R.MartinhoFernandes: Si 'constexpr' está completo, solo use' constexpr' para modelar una lista de enteros que se puedan cultivar en ambos extremos. – kennytm
@ R.MartinhoFernandes: Puede ser interesante publicar esa respuesta en http://stackoverflow.com/questions/9201506/is-constexpr-based-computation-turing-complete. – kennytm