タグ付けされた質問 「variable-length-array」

12
可変長配列がC ++標準に含まれていないのはなぜですか?
ここ数年はCをあまり使っていません。今日この質問を読んだとき、私は知らないC構文に出くわしました。 どうやらC99では次の構文が有効です。 void foo(int n) { int values[n]; //Declare a variable length array } これはかなり便利な機能のようです。これをC ++標準に追加することについての議論はありましたか?その場合、なぜそれが省略されたのですか? いくつかの潜在的な理由: コンパイラベンダーが実装するのは難しい 標準の他の一部と互換性がない 機能は他のC ++構造でエミュレートできます C ++標準では、配列サイズは定数式である必要があると規定されています(8.3.4.1)。 はい、もちろん私はおもちゃの例ではを使用できることを理解してstd::vector<int> values(m);いますが、これはスタックではなくヒープからメモリを割り当てます。そして、私が次のような多次元配列が必要な場合: void foo(int x, int y, int z) { int values[x][y][z]; // Declare a variable length array } vectorバージョンはかなり不器用次のようになります。 void foo(int x, int y, int z) …



4
グローバル配列のサイズを整数定数にする必要があるのはなぜですか?
C ++では、あるサイズのグローバル配列を宣言してみました。エラーが発生しました: バインドされた配列は ']'トークンの前の整数定数ではありません しかし、main()関数内で同じ型の配列を宣言すると、うまく機能します。 ここに異なる動作があるのはなぜですか? int y=5; int arr[y]; //When I comment this line it works fine int main() { int x=5; int arr2[x]; // This line doesn't show any error. } 編集:多くの人が、この質問は「配列の境界が ']'トークンの前の整数定数ではありません」というエラーの複製であると示唆しています。しかし、その質問は、なぜ異なる行動があるのか​​には答えません。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.