Namespaces
Variants

constexpr specifier (since C23)

From cppreference.net

constexpr ストレージクラス指定子で宣言されたスカラーオブジェクトは 定数 です。静的初期化ルールに従って完全かつ明示的に初期化されなければなりません。宣言に応じたリンケージを持ち、実行時にアドレスを取得するために存在しますが、実行時にいかなる方法でも変更することはできません。つまり、コンパイラはオブジェクトの固定値を他のあらゆる constant expression で利用できます。

さらに、そのような定数の初期化子として使用される定数式はコンパイル時にチェックされます。

浮動小数点型の初期化子は、翻訳時点の浮動小数点環境で評価されなければなりません。

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++ ドキュメント for constexpr 型指定子