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