数组大小是否需要为常量?

时间:2015-03-08 12:32:28

标签: c++ arrays

我被教导如果我们定义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

2 个答案:

答案 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阵列)

  
      
  1. ...如果常量表达式(5.19)存在,它应该是std :: size_t类型的转换常量表达式,其值应为   大于零。
  2.