2013-05-14 182 views
0

當我試圖動態地分配指針數組燒焦的陣列的動態分配,我意外地增加了額外的括號數組指針

char** p = new (char*) [5]; 

和發生錯誤

error: array bound forbidden after parenthesized type-id|

我不t退出明白了什麼是錯的,上面的代碼和

之間有什麼區別
char** p = new char* [5]; 

確實這些括號改變了語義?

+1

這只是無效的語法。你爲什麼不寫'char ** p =給我一些指針;'?這是同樣的問題。 – David 2013-05-14 14:50:44

回答

2

does these parenthesis alter the semantics?

不,它改變了從有效到無效的語法。你不能把括號放在你喜歡的任何地方;他們只能去允許括號的地方,而這不是一個。

+0

有可能回純C – 2017-04-05 10:13:05

1

類型中的括號可以改變聲明的含義;例如,new char * [5]是指向char的5個指針的數組,但char (* a)[5]是指向5個字符數組的指針。

另一方面,您編寫的類型聲明沒有意義,因爲編譯器發出信號。

有關(亂)C語法聲明和如何解釋它們,看here,看here的C聲明<例子 - >英語轉換器。

0

我覺得你的代碼看起來像你調用使用初始化原始內存的位置,「新」運算符的重載版本的方式你寫如

struct point 
    { 
     point(void) : x(0), y(0) { } 
     int x; 
     int y; 
    }; 

    void proc(void) 
    { 
     point pts[2]; 
     new(&pts[0]) point[2]; 
    } 
0

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 

該錯誤消息不是編譯器發出的更有用的信息之一。