constexpr 说明符 (C23 起)
来自cppreference.com
用 constexpr
存储类说明符声明的标量对象属于常量。必须根据静态初始化规则进行完全且明确的初始化。它仍然有适于其声明的链接,并且在运行时存在,以获取其地址;它只是在运行时不能以任何方式进行修改,即,编译器可以在任何其他常量表达式中运用“对象具有固定值“的知识。
此外,这种常量的初始化式所使用的常量表达式,在编译时进行检查。
浮点类型的初始化式必定在翻译时的浮点环境中进行计算。
可以用 constexpr
声明的对象类型有一些限制。也就是说,以下构造不能使用 constexpr
:
关键词
注解
示例
运行此代码
#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; // 不会被上方的 fesetround() 影响 printf("%f\n", h); }
输出:
0.696969
引用
- C23 标准(ISO/IEC 9899:2024):
- TBD TBD (第 TBD 页)