私が理解している限りでは、constexpr は、指定された式をコンパイル時に評価できるかどうかを確認し、可能であればそうするためのコンパイラへのヒントと見なすことができます。
constexpr として宣言された関数または初期化にもいくつかの制限が課されることは知っていますが、最終的な目標はコンパイル時の評価ですね。
だから私の質問は、なぜそれをコンパイラに任せることができないのですか? 前提条件をチェックできることは明らかですが、式ごとに実行し、可能な場合はコンパイル時に評価しないのはなぜですか?
なぜそうなるのかについては 2 つの考えがありますが、それが的を射ているとはまだ確信が持てません。
a) コンパイル時に時間がかかりすぎる可能性があります。
b) 私のコードでは、通常の関数が許可されない場所で constexpr 関数を使用できるため、指定子も一種の宣言の一部です。コンパイラがすべてを単独で行った場合、関数の 1 つのバージョンで C 配列定義の関数を使用できますが、次のバージョンではコンパイラ エラーが発生する可能性があります。より満足。