【一人 C++20 Advent Calendar 2019】constinit 指定子を追加【15日目】
一人 C++20 Advent Calendar 2019 15日目の記事になります。
constinit 指定子を追加
constinit
指定子を使用すると初期化のみをコンパイル時に処理されることを保証することが出来ます。
constinit
指定子は静的またはスレッド記憶域期間を持つ変数に対して使用することが出来ます。
constexpr
とは違い変数自体はコンパイル時に処理されません。
constexpr int sqr(int n) { return n * n; } // value の初期化はコンパイル時に行われる // 静的またはスレッド記憶域期間を持つ変数に対して使用できる // この時に右辺はコンパイル時に解決できる式でなければならない // ただし、value 自体は constexpr とは扱われない static constinit int value = sqr(3); // OK: value は不変ではないので再代入可能 value = 42; // NG: value はコンパイル時に解決出来ないのでエラー static_assert(value == 9); // NG: value はコンパイル時に解決出来ないのでエラー constexpr auto value2 = sqr(value);
これも consteval
と同じように結構使いどころが難しそうですねえ。