void method(string a) {
int n = a.size();
int array[n];
}
上述代码可以使用gcc正确编译。数组的大小如何来自非常量变量?编译器是否自动将int array[n]
转换为int* array = new int[n]
?C++声明一个基于非常量变量的数组?
void method(string a) {
int n = a.size();
int array[n];
}
上述代码可以使用gcc正确编译。数组的大小如何来自非常量变量?编译器是否自动将int array[n]
转换为int* array = new int[n]
?C++声明一个基于非常量变量的数组?
数组的大小如何来自非常量变量?
目前,因为该编译器有一个非标准的扩展,它允许您在C++程序中使用C的可变长度数组。
编译器是否自动将
int array[n]
转换为int* array = new int[n]
?
这是一个实现细节。我相信GCC会将它放在堆栈上,就像正常的自动变量一样。如果堆栈的大小太大,它可能会或可能不会使用动态分配;我不认识我自己。
动态分配。关键字new
将使用指针和一些分配来完成此操作。
int * ptr;
int n = a.size();
ptr = new int[n];
这样做的另一个好处是指针地址可以从函数返回,其中静态创建的数组从函数返回时从堆栈上擦除 –
变量ptr可以像使用数组,例如你可以使用像[ptr [a-1]]这样的[]下标来访问数组的最后一个元素 –
我认为这个缺点是你需要自己明确地管理内存并记得调用'稍后删除[]'。真的,只需使用'std :: vector'。 – jamesdlin
根据this编译器允许用C这个表达式++尽可能C90/99。
这是一个编译器扩展。 – chris
使用'const'。使用参考。使用矢量 –
使用GCC,用'-pedantic-errors'编译你的代码,然后看看它说了什么! – Nawaz