¿Por qué necesitamos marcar las funciones como constexpr?

C ++ 11 permite funciones declaradas con elconstexpr Especificador que se utilizará en expresiones constantes como argumentos de plantilla. Hay requisitos estrictos sobre lo que se permite serconstexpr; Básicamente, una función de este tipo encapsula solo una subexpresión y nada más. (Edit: esto está relajado en C ++ 14 pero la pregunta es válida).

¿Por qué requerir la palabra clave en absoluto?¿Qué se gana?

Ayuda a revelar la intención de una interfaz, perono hace Valide esa intención, garantizando que una función sea utilizable en expresiones constantes. Después de escribir unconstexpr función, un programador todavía debe:

Escriba un caso de prueba o, de lo contrario, asegúrese de que realmente se usa en una expresión constante.Documente qué valores de parámetros son válidos en un contexto de expresión constante.

Contrariamente a la intención reveladora, decorar funciones conconstexpr puede agregar una falsa sensación de seguridad ya que las restricciones sintácticas tangenciales se verifican al ignorar la restricción semántica central.

En breve: ¿Habría algún efecto indeseable en el idioma siconstexpr ¿En declaraciones de función eran meramente opcionales? ¿O habría algún efecto en absoluto en cualquier programa válido?

Respuestas a la pregunta(4)

Su respuesta a la pregunta