我是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]
?
答案 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);