constexpr specifier (since C23)
From cppreference.net
使用 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):
-
- 6.7.2 存储类说明符 (p: 98-103)
参见
|
C++ 文档
关于
constexpr
类型说明符
|