Namespaces
Variants

constexpr specifier (since C23)

From cppreference.net

使用 constexpr 存储类说明符声明的标量对象是一个 常量 。它必须根据静态初始化规则进行完全且显式的初始化。该对象仍具有与其声明相对应的链接属性,并在运行时存在以便获取其地址;它仅仅无法在运行时以任何方式被修改,也就是说,编译器可以在其他 常量表达式 中利用该对象固定值的已知信息。

此外,用于此类常量初始值设定项的常量表达式会在编译时进行检查。

浮点类型的初始化器必须在翻译时浮点环境下求值。

对于可以使用 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 类型说明符