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

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

4

3 回答 3

6

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

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

编译器会自动翻译int array[n]int* array = new int[n]吗?

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

于 2013-10-20T03:39:16.870 回答
1

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

int * ptr;
int n = a.size();
ptr = new int[n];
于 2013-10-20T03:33:39.110 回答
1

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

于 2013-10-20T03:34:57.547 回答