【一人 C++20 Advent Calendar 2019】consteval 指定子を追加【14日目】
一人 C++20 Advent Calendar 2019 14日目の記事になります。
consteval 指定子を追加
consteval
とは即時関数を示す為の指定子です。
即時関数とはその関数の呼び出しがコンパイル時定数式を生成しなければならないことを指します。
// コンパイル時に定数を定義する時のみ呼べる consteval int sqr(int n) { return n * n; } // OK: コンパイル時定数になる constexpr int n1 = sqr(4); static_assert(n1 == 16); int n2 = 3; // NG: コンパイル時定数にならない int n3 = sqr(n2);
constexpr
はコンパイル時、実行時どちらかも呼べますが consteval
はコンパイル時にのみ呼び出せる、って感じですかね。
いまいちユースケースが思いつかないんですがどういう時に利用するんですかね。
consteval
を利用することで実行時ではなくてコンパイル時に処理することを明示化するとかなのかな…。