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.