-1

配列に長さ x を指定したいと思います。x はユーザー入力です。しかし問題は、x が const でなければならないことです。

これは私が持っているコードです:

int *length = 0;
cin >> (*length);
const int arraylength = const_cast<int>(*length);
int l[arraylength];
4

2 に答える 2

6

C++ では動的な長さでスタックベースの配列を割り当てることはできません (C では可能です)。長さはコンパイル時の定数である必要があります。std::vector<>配列を動的に割り当てる(または使用する)必要があります

int* l = new int[arrayLength];
// use l as you did before
delete[] l; // when you no longer need to access its contents

また、 pointer を宣言しますlengthが、それは に初期化されNULLます。つまり、逆参照できません (cin >> (*length);実行時に失敗します) 。

:C++を使用しているためstd::vector<int>、生の配列の代わりに使用することをお勧めします-必要に応じて動的なサイズ変更と可能な境界チェック(at()メンバー関数を使用する場合)の利点が得られます。使用するときに削除する必要もありません有効期間が終了すると、割り当てられたメモリをクリーンアップするための RAII イディオム (例外に直面した場合のメモリ リーク保護も提供します)。

于 2012-06-22T11:44:24.693 に答える
3

C++ は VLA (可変長配列) をサポートしていません。ただしconstintコンパイル時に修正されていません。

代替案:

std::vector<int> l(arraylength);

また

int* l = new int[arraylength];
//...
delete[] l;
于 2012-06-22T11:45:49.307 に答える