変数のconstとconstexpr [重複] 質問する

変数のconstとconstexpr [重複] 質問する

以下の定義には違いがありますか?

const     double PI = 3.141592653589793;
constexpr double PI = 3.141592653589793;

そうでない場合、C++11 ではどのスタイルが推奨されますか?

ベストアンサー1

違いがあると思います。もっと簡単に話せるように名前を変えてみましょう。

const     double PI1 = 3.141592653589793;
constexpr double PI2 = 3.141592653589793;

PI1と は両方ともPI2定数であるため、変更できません。ただし、のみは PI2コンパイル時定数です。コンパイル時に初期化する必要があります。はコンパイル時または実行時に初期化できPI1ます。さらに、のみは PI2コンパイル時定数を必要とするコンテキストで使用できます。例:

constexpr double PI3 = PI1;  // error

しかし:

constexpr double PI3 = PI2;  // ok

そして:

static_assert(PI1 == 3.141592653589793, "");  // error

しかし:

static_assert(PI2 == 3.141592653589793, "");  // ok

どちらを使用すべきでしょうか? ニーズを満たす方を使用してください。コンパイル時定数が必要なコンテキストで使用できるコンパイル時定数があることを確認したいですか? 実行時に行われる計算でそれを初期化できるようにしたいですか? など。

おすすめ記事