我想在堆栈上创建一个在运行时大小不同的数组。据我所知,这在c ++中总是非法的:
void local_array(unsigned int i) {
int arr[i];
}
但是,可以使用递归在堆栈上动态分配内存。有没有不同的方法来实现这一点而不使用递归?如果没有,那么阻止上述例子被实现的技术限制是什么?
答案 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”
}