void method(string a) {
int n = a.size();
int array[n];
}
上面的代码可以使用gcc正确编译。数组的大小如何来自非常量变量?编译器是否自动将int array[n]
翻译为int* array = new int[n]
?
答案 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.