所以這可能看起來像一個被廣泛回答的問題,但我更關心兩者之間發生什麼不同的內部事件。當使用常量長度時char []和new char []之間的區別
除此之外,第二個例子不僅創造了記憶,而是一個指向內存,什麼內存發生當發生以下情況的事實:
char a[5];
char b* = new char[5];
,更直接關係到爲什麼我問這個問題,爲什麼我能做到
const int len = 5;
char* c = new char[len];
但不
const int len = 5;
char d[len]; // Compiler error
編輯應該提到我的VC獲得此編譯器錯誤++(去圖...)
1>.\input.cpp(138) : error C2057: expected constant expression
1>.\input.cpp(138) : error C2466: cannot allocate an array of constant size 0
1>.\input.cpp(138) : error C2133: 'd' : unknown size
編輯2:應該已經公佈確切的代碼我正在同。如果使用運行時值計算動態分配數組的常量長度,則會產生此錯誤。
假設random(a,b)
返回a
和b
之間的int
,
const int len1 = random(1,5);
char a[len1]; // Errors, since the value
// is not known at compile time (thanks to answers)
而
const int len2 = 5;
char b[len2]; // Compiles just fine
我沒有得到使用GCC 4.4.6的編譯器錯誤,並不期望一個。 – trojanfoe
我的不好,應該提到我正在使用VC++。 – Qix
我仍然不會指望有錯誤。 – trojanfoe