2012-08-01 121 views
19
#include <iostream> 
int main() 
{ 
    ------- some statements --------- 

    int(a)(1); 

    -------- some other statments ....... 
    return 0; 
} 

我在C++程序中看到了這個聲明。這不會導致語法錯誤。什麼是int(a)(1)?這是一個有效的c + +語法?

這是什麼a?這是有效的C++語法嗎?

+4

現在的問題是:誰在世界上寫道? – Mysticial 2012-08-01 01:55:08

+5

也許空格鍵壞了。 – 2012-08-01 02:11:40

+0

可能是宏擴展或某種其他形式的代碼生成的結果 – 2012-08-01 09:23:51

回答

28

這是好把括號中的變量名:

int i; 
int (i); // exact same 

所以你的情況:

int a(1); // initialized with 1 
int (a)(1); // exact same 
+7

現在有獎金問題 - 爲什麼! – 2012-08-01 02:01:52

+7

@Martin:類型在一定程度上可組合,而多餘的一組括號允許對子表達式進行分組。該語言本來可以禁止在不嚴格要求的情況下使用括號,但他們沒有。例如,'int(X)()'聲明'X'是一個*函數*,不帶參數並返回'int',現在,如果'X'是'* Y',那麼它是一個指向[..]的指針。 。],如果'Y'是'Z [10]'它將是一個10個指向函數的指針的數組......在許多情況下,分組需要使用括號,所以爲什麼在其他地方禁止它們?考慮到他們在任何其他地方都可以使用圓括號組。 – 2012-08-01 02:11:33

+1

@MartinBeckett:爲了增加更多的語言爲什麼而不是'道德'爲什麼,§8/ 4明確地允許它在語法中。並且§6.8通過表達式語句('T(e)[5]''可能意味着聲明'e'與類型'T [5]'或將'e'強制轉換爲'T'和下標索引5;在這些不明確的情況下,一個聲明總是結果)。 – GManNickG 2012-08-01 02:16:43