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

    int(a)(1); 

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

Zobaczyłem to oświadczenie w programie C++. Nie spowodowało to błędu składni.co to jest int (a) (1)? czy jest to poprawna składnia C++?

Co to jest a tutaj? Czy jest to poprawna składnia C++?

+4

Teraz pytanie brzmi: kto w świecie napisał, że? – Mysticial

+5

Może spacja była zepsuta. –

+0

może być wynikiem rozszerzenia makra lub innej formy generowania kodu –

Odpowiedz

28

To jest w porządku, aby umieścić nazwę zmiennej w nawiasach:

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

Więc w twoim przypadku:

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

Teraz pytanie premiowe - dlaczego! –

+7

@Martin: typy są do pewnego stopnia kompozycyjne, a dodatkowy zestaw nawiasów pozwala na grupowanie podwyrażeń. Język mógł zabronić używania nawiasów, jeśli nie jest to bezwzględnie wymagane, ale nie. Na przykład 'int (X)()' deklaruje 'X' jako funkcję * * nie pobiera argumentów i zwraca' int', teraz, jeśli 'X' to' * Y', to jest wskaźnikiem na [... .], jeśli "Y" to "Z [10]", będzie to tablica 10 wskaźników do funkcji ... W wielu przypadkach do grupowania wymagane są nawiasy, więc po co je zakazać innym? ... biorąc pod uwagę, że są dopuszczone gdziekolwiek indziej w grupie nawiasów. –

+1

@MartinBeckett: I aby dodać do bardziej języka, dlaczego zamiast "moralnego", dlaczego, § 8/4 wyraźnie pozwala na to w gramatyce. Oraz §6.8 usuwa niejasności z wyrażeniami-wyrażeniami ("T (e) [5]" może oznaczać zadeklarowanie 'e' z typem' T [5] 'lub rzutowanie' e' na indeks 'T' i indeks dolny 5; w tych niejednoznacznych przypadkach deklaracja jest zawsze wynikiem). – GManNickG