为什么在这种情况下使用int * arr = new int [number]?

时间:2018-01-09 13:49:55

标签: c++

我是C ++的初学者。我见过一个示例代码,如下所示:

int quantity;
cout << "Enter the number of items: " << endl;
cin >> quantity;
int *arr = new int[quantity];

for(int i=0; i <quantity; i++)
{ 
cout<< "Enter item no." << i << endl;
cin >> arr[i];
}

但是当我用int *arr = new int[quantity];替换int arr[quantity];时,程序仍然可以编译而没有任何错误消息。为什么使用int *arr = new int[quantity]代替int arr[quantity]

1 个答案:

答案 0 :(得分:3)

quantity不是编译时常量,因此如下:

int arr[quantity];

...无效的C ++(即使它是有效的C99)。

您的代码可能会编译,因为您的编译器是允许此构造的扩展,例如GCC VLA extension

  

ISO C99允许使用可变长度自动数组,并且作为扩展名 GCC在C90模式和C ++中接受它们。

使用-pedantic进行编译应该至少会给您一个警告。 GCC给了我以下(-pedantic):

  

8 :: 8:21:警告:ISO C ++禁止可变长度阵列&#39; arr&#39; [-Wvla]

int arr[quantity];

请注意,在这种情况下,您可能应该使用std::vector而不是手动分配的数组:

std::vector<int> arr(quantity);