constexpr specifier (since C23)
Un objeto escalar declarado con el especificador de clase de almacenamiento constexpr es una constante . Debe estar completamente e explícitamente inicializado de acuerdo con las reglas de inicialización estática. Todavía tiene vinculación apropiada para su declaración y existe en tiempo de ejecución para que se tome su dirección; simplemente no puede ser modificado en tiempo de ejecución de ninguna manera, es decir, el compilador puede usar su conocimiento del valor fijo del objeto en cualquier otra expresión constante .
Además, la expresión constante que se utiliza para el inicializador de dicha constante se verifica en tiempo de compilación.
Un inicializador de tipo punto flotante debe ser evaluado con el entorno de punto flotante en tiempo de traducción.
Existen algunas restricciones sobre el tipo de objeto que puede declararse con constexpr . Específicamente, las siguientes construcciones no pueden ser constexpr :
- Punteros (excepto que los punteros nulos pueden ser constexpr ),
- Tipos modificables variables,
- Tipos atómicos ,
-
volatiletipos, -
restrictpunteros.
Contenidos |
Palabras clave
Ejemplo
#include <fenv.h> #include <stdio.h> int main(void) { constexpr float f = 23.0f; constexpr float g = 33.0f; fesetround(FE_TOWARDZERO); constexpr float h = f / g; // no se ve afectado por fesetround() anterior printf("%f\n", h); }
Salida:
0.696969
Referencias
- Estándar C23 (ISO/IEC 9899:2024):
-
- 6.7.2 Especificadores de clase de almacenamiento (p: 98-103)
Véase también
|
Documentación de C++
para
constexpr
especificador de tipo
|