2016-03-29 12 views
8

これらのメンバ変数の違いは何ですか:静的const vs constexprメンバーフィールドはC++ 11/14でですか?

struct my_class { 
    static const int i = 0; 
    static constexpr int j = 0; 
}; 

私の理解が正しければ、私はコンパイル時の定数としてijの両方を使用することができますよ。つまり、std::array<int, my_class::i>std::array<int,my_class::j>の両方が動作するはずです。

+5

可能な重複http://stackoverflow.com/questions/14116003/difference-between-constexpr-and-const ) –

+0

その質問を読んだ後、私はまだ私の質問への答えを理解することができません: – amin

+0

@HumamHelfawi私はconstexprが静的なときにどのような違いがあるか知りたいです。それは少し違います。 – amin

答えて

7

(例のように)整数型または列挙型のメンバには違いはありません。他のすべてのタイプ、定数式require constexpr用:

左辺ツー右辺値が

  • 指す一体または列挙タイプの不揮発性glvalueに適用されていない限り、変換(4.1)前の の初期化、定数式で初期化された完全な不揮発性constオブジェクト、または[...]
  • 不揮発性オブジェクトを参照する不揮発性オブジェクトを指す、constexprを指す、または可変ではないそのようなサブオブジェクトである オブジェクト、または[...]
([\ `constexprの\`と\ `のconst \`との差]の
関連する問題