const
とconstexpr
が配列で使用される場合に違いがあるのはなぜですか?
int const xs[]{1, 2, 3};
constexpr int ys[]{1, 2, 3};
int as[xs[0]]; // error.
int bs[ys[0]]; // fine.
xs[0]
と の両方が定数式であると予想ys[0]
しますが、定数式として扱われるのは後者だけです。
C++11は、キーワードconstexpr
とは異なり、コンパイル時に式を評価できるようにするために使用されます。const
constexpr int ys[]{1, 2, 3};
コンパイル時に評価されるため、エラーは発生しません
いつys[0]
使用されます。
また、ここでは C++11 の均一な初期化が使用されていることに注意してください。{}
その他の例:
constexpr int multipletwo(int x)
{
return 2*x;
}
int num_array[multipletwo(3)]; //No error since C++11, num_array has 6 elements.