Occasionaly,我做了一個錯字在一個地方我的程序代碼:我真的可以用圓括號初始化一個數組嗎?
int a = 10;
char* b = new char(a);
錯誤是顯而易見的:我寫的(),而不是[]。奇怪的是...代碼編譯好了,它在調試器中運行正常。但是,在調試器外部編譯的.exe函數在執行完這些行之後崩潰了一會兒。
第二行代碼真的合法嗎?如果是,編譯器意味着什麼?
Occasionaly,我做了一個錯字在一個地方我的程序代碼:我真的可以用圓括號初始化一個數組嗎?
int a = 10;
char* b = new char(a);
錯誤是顯而易見的:我寫的(),而不是[]。奇怪的是...代碼編譯好了,它在調試器中運行正常。但是,在調試器外部編譯的.exe函數在執行完這些行之後崩潰了一會兒。
第二行代碼真的合法嗎?如果是,編譯器意味着什麼?
它是一個單個字符,其數值爲a
,在這種情況下爲10
。指針不僅指向數組,你知道。
您正在分配一個單個char
併爲其分配值爲a
。它根本不分配數組。
這與調用任何其它類型的new
表達構造:
std::string* s = new std::string("foo");
int* i = new int(10);
std::vector<std::string>* v = new std::vector<std::string>(5, "foo");
char t(a)
創建初始化爲a
值本地字符。
new char (a)
創建一個動態分配的char,初始化爲a
的值。