void method(string a) {
int n = a.size();
int array[n];
}
上述代码可以使用gcc编译正确。数组大小如何来自非常量变量?编译器是否会自动将int array[n]
翻译为int* array = new int[n]
?
非常量的变量如何用来定义数组的大小?
目前,这是因为编译器有一种非标准扩展,允许在C++程序中使用C语言的变长数组。
编译器是否自动将
int array[n]
转换为int* array = new int[n]
?
这是一种实现细节。我相信 GCC 将其放在堆栈上,就像普通的自动变量一样。如果大小超过堆栈限制,它可能会使用动态分配,但我自己不确定。
new
关键字可以通过指针进行动态内存分配。int * ptr;
int n = a.size();
ptr = new int[n];
ptr [a-1]
来访问数组的最后一个元素。 - Jacob Minshalldelete[]
。实际上,只需使用std::vector
即可。 - jamesdlinnew
。 - chrisstd::vector
或智能指针。 - chris
const
关键字。使用引用。使用向量(vector)。 - Ed Heal