堆栈上的非静态大小的数组

时间:2014-01-13 08:31:17

标签: c++ arrays stack

我想在堆栈上创建一个在运行时大小不同的数组。据我所知,这在c ++中总是非法的:

void local_array(unsigned int i) {
    int arr[i];
}

但是,可以使用递归在堆栈上动态分配内存。有没有不同的方法来实现这一点而不使用递归?如果没有,那么阻止上述例子被实现的技术限制是什么?

2 个答案:

答案 0 :(得分:2)

没有技术限制。

你可以在C ++ 14中做到这一点,它已经在clang& gcc最新版本。

void test(int n)
{
   int a[n]; //ok now
   cout << a[0] << endl; //output a random value on stack!
}

答案 1 :(得分:1)

2013年4月建议(N3639 - Runtime-sized arrays with automatic storage duration)这样的功能并被接受。

它现在是C++ 2013-05-15 Committee Draft

的一部分

从8.3.4开始:

void f(unsigned int n)
{
    int a[n]; // type of a is “array of runtime bound of int”
}