为什么C ++中的可变大小数组(VLA)需要自动(自动)存储类?

时间:2016-12-25 18:10:49

标签: c++ arrays g++

根据C ++标准,数组的大小必须大于零且编译时间常数如果数组是VLA,则它必须具有自动存储持续时间,即数组必须是本地的。换句话说:

#include<iostream>
int size = 10; 
constexpr int Size = 10;
int ar[size]; /* error as size is not a compile time constant and ar does not have auto storage class. */
int Ar[Size]; // fine, no error as Size is a compile time constant.
int main()
{
    int arr[size]; // fine as arr has auto storage class.
    return 0;
}

所以,我的问题是 - 为什么我们不能在C ++中使用静态存储持续时间的VLA?

1 个答案:

答案 0 :(得分:1)

  

所以,我的问题是 - 为什么我们不能在C ++中使用静态存储持续时间的VLA?

首先,VLA不是标准的c ++功能。

好吧,如果你有一个支持VLA的编译器,这些不能用于静态存储分配,因为它只是一个运行时功能,所有静态存储分配都是在编译时完成的。