#include <iostream>
int main()
{
------- some statements ---------
int(a)(1);
-------- some other statments .......
return 0;
}
我在C++程序中看到了這個聲明。這不會導致語法錯誤。什麼是int(a)(1)?這是一個有效的c + +語法?
這是什麼a
?這是有效的C++語法嗎?
#include <iostream>
int main()
{
------- some statements ---------
int(a)(1);
-------- some other statments .......
return 0;
}
我在C++程序中看到了這個聲明。這不會導致語法錯誤。什麼是int(a)(1)?這是一個有效的c + +語法?
這是什麼a
?這是有效的C++語法嗎?
這是好把括號中的變量名:
int i;
int (i); // exact same
所以你的情況:
int a(1); // initialized with 1
int (a)(1); // exact same
現在有獎金問題 - 爲什麼! – 2012-08-01 02:01:52
@Martin:類型在一定程度上可組合,而多餘的一組括號允許對子表達式進行分組。該語言本來可以禁止在不嚴格要求的情況下使用括號,但他們沒有。例如,'int(X)()'聲明'X'是一個*函數*,不帶參數並返回'int',現在,如果'X'是'* Y',那麼它是一個指向[..]的指針。 。],如果'Y'是'Z [10]'它將是一個10個指向函數的指針的數組......在許多情況下,分組需要使用括號,所以爲什麼在其他地方禁止它們?考慮到他們在任何其他地方都可以使用圓括號組。 – 2012-08-01 02:11:33
@MartinBeckett:爲了增加更多的語言爲什麼而不是'道德'爲什麼,§8/ 4明確地允許它在語法中。並且§6.8通過表達式語句('T(e)[5]''可能意味着聲明'e'與類型'T [5]'或將'e'強制轉換爲'T'和下標索引5;在這些不明確的情況下,一個聲明總是結果)。 – GManNickG 2012-08-01 02:16:43
現在的問題是:誰在世界上寫道? – Mysticial 2012-08-01 01:55:08
也許空格鍵壞了。 – 2012-08-01 02:11:40
可能是宏擴展或某種其他形式的代碼生成的結果 – 2012-08-01 09:23:51