C ++基于非常量变量声明一个数组?

时间:2013-10-20 03:31:49

标签: c++ arrays dynamic

void method(string a) {
  int n = a.size();
  int array[n];
}

上面的代码可以使用gcc正确编译。数组的大小如何来自非常量变量?编译器是否自动将int array[n]翻译为int* array = new int[n]

3 个答案:

答案 0 :(得分:6)

  

数组的大小如何来自非常量变量?

目前,因为该编译器具有非标准扩展,允许您在C ++程序中使用C的可变长度数组。

  

编译器是否自动将int array[n]翻译为int* array = new int[n]

这是一个实现细节。我相信GCC会把它放在堆栈上,就像普通的自动变量一样。如果堆栈的大小太大,它可能会也可能不会使用动态分配;我不了解自己。

答案 1 :(得分:0)

动态分配。 new关键字将使用指针和一些分配执行此操作。

int * ptr;
int n = a.size();
ptr = new int[n];

答案 2 :(得分:0)

根据this,编译器允许在C ++中使用此表达式,直至C90 / 99.