標準では、動的にサイズ変更され、静的に割り当てられた配列は許可されていません。GCC ではこれが可能であることに気付くかもしれませんが、これは、非準拠の動作を許可する多くの拡張機能の 1 つであるためです。
配列は次のように定義されます。
D1 [ constant-expression
opt
] attribute-specifier-seq
opt
サイズは整数定数式です。標準では、整数定数式を次のように定義しています。
整数定数式は、暗黙的に prvalue に変換された整数またはスコープなし列挙型の式であり、変換された式はコア定数式です。[注: このような式は、配列の境界 (8.3.4、5.3.4)、[...]として使用できます— 末尾の注]
int n = 10;
int x[n]; // error!
変数n
は定数式ではないため、この場合は機能しません。
型に (C++11) を追加constexpr
することで、定数式で使用できるようになります。しかし、この場合const
はそれを機能させるのに十分です:
int const n = 5;
int x[n];
一方、動的配列は動的サイズ指定子を取ります。
int n = 10;
int *x = new int[n];
ただし、使用をお勧めするオプションはstd::vector
、動的サイズのバッファーのラッパーです。
#include <vector>
int main()
{
int n = 10;
std::vector<int> x(n); // x.size() is 10
}
これが役に立ったことを願っています。