我被教导如果我们定义array[N]
,那么N
应该是一个const变量或一个const表达式。但是现在我发现以下代码可以编译并正确运行。(我使用g ++ 4.8.3,如果我使用vs2010,则会出现编译错误:错误C2057:预期constannt快递)
#include<iostream>
int main()
{
int N;
std::cin>>N;
int A[N];
for(int i=0;i<N;++i)
std::cin>>A[i];
for(int i=0;i<N;++i)
std::cout<<A[i]<<" ";
return 0;
}
显然N
不是const类型。我用g ++ 4.8.3
答案 0 :(得分:0)
&#34; 数组大小是否必须为常量?&#34;
是的,根据当前的c ++标准,数组大小说明符需要是const表达式。
许多编译器支持堆栈上的VLA(可变长度数组)分配。它是一个编译器扩展,不是可移植代码。
如果您需要便携式变体,可以使用std::vector<int>
,如下所示
int N;
std::cin>>N;
std::vector<int> A(N);
答案 1 :(得分:0)
似乎第一个编译器有自己的语言扩展,允许使用可变长度数组(在C中引入)。
然而,此功能不符合C ++。根据C ++中数组的定义,数组的大小(如果存在)应该是一个大于零的常量表达式:
D1 [ constant-expressionopt] attribute-specifier-seqopt
来自C ++标准(8.3.4阵列)
- ...如果常量表达式(5.19)存在,它应该是std :: size_t类型的转换常量表达式,其值应为 大于零。
醇>