ポインタを明示的に使用せずにC ++で動的配列を作成することは可能ですか(int*配列の代わりにint配列[])?
すなわち。このようなもの:
int size = 5;
int array[];
array = new int{size};
for (int i = 0; i < size; i++)
{
array[i];
}
ポインタを明示的に使用せずにC ++で動的配列を作成することは可能ですか(int*配列の代わりにint配列[])?
すなわち。このようなもの:
int size = 5;
int array[];
array = new int{size};
for (int i = 0; i < size; i++)
{
array[i];
}
はい、もちろん可能です:
#include <iostream>
int main()
{
[](int array[] = new int[10]) {
std::cout << "array = " << array << "\n";
delete[] array;
}();
}
要するに、違います。コンパイラは配列のサイズを知る必要があるため、c ++でスタック割り当て配列を使用するには、宣言で指定する必要があります。代わりに、 STLVectorクラスを確認することをお勧めします。
int array[];
必ず (関数またはクラスのスコープで) 自動保存期間を持ち、動的保存期間を持つことはできません。
のようなクラス内でポインターを非表示にすることができますstd::vector<int>
。
次のようなことができます
int (&array)[5] = reinterpret_cast<int(&)[5]>(*new int[5]);
削除するには:delete [] array;
参照を使用してそれを行うことができます:
#include <iostream>
using namespace std;
int main()
{
int& val = *(new int[2]);
val = 1;
*(&val + 1) = 2;
cout << val << ' ' << *(&val+1) << '\n';
delete [] (&val);
return 0;
}
しかし、ご覧のとおり、これはあまり読みにくく、エラーが発生しやすくなります。最善の策は、単に使用することstd::vector
です。