當我試圖動態地分配指針數組燒焦的陣列的動態分配,我意外地增加了額外的括號數組指針
char** p = new (char*) [5];
和發生錯誤
error: array bound forbidden after parenthesized type-id|
我不t退出明白了什麼是錯的,上面的代碼和
之間有什麼區別char** p = new char* [5];
確實這些括號改變了語義?
當我試圖動態地分配指針數組燒焦的陣列的動態分配,我意外地增加了額外的括號數組指針
char** p = new (char*) [5];
和發生錯誤
error: array bound forbidden after parenthesized type-id|
我不t退出明白了什麼是錯的,上面的代碼和
之間有什麼區別char** p = new char* [5];
確實這些括號改變了語義?
does these parenthesis alter the semantics?
不,它改變了從有效到無效的語法。你不能把括號放在你喜歡的任何地方;他們只能去允許括號的地方,而這不是一個。
有可能回純C – 2017-04-05 10:13:05
我覺得你的代碼看起來像你調用使用初始化原始內存的位置,「新」運算符的重載版本的方式你寫如
struct point
{
point(void) : x(0), y(0) { }
int x;
int y;
};
void proc(void)
{
point pts[2];
new(&pts[0]) point[2];
}
do these parenthesis alter the semantics?
是的, new
運算符使用括號括起來的參數來觸發「放置新的」 - 它期望括號中的內容指向原始存儲。
你給new
聲明你想要分配的對象,只有沒有名字,每個聲明都以typename開頭。
// I find "inside-out, right to left" to be a helpful rule
char *a[5]; new char *[5]; // no parens, so array of 5 pointers, to char
char (*a)[5]; new char (*)[5]; // pointer to array, of char
該錯誤消息不是編譯器發出的更有用的信息之一。
這只是無效的語法。你爲什麼不寫'char ** p =給我一些指針;'?這是同樣的問題。 – David 2013-05-14 14:50:44