In aggiunta alle altre risposte, a volte il dichiaratore deve essere tra parentesi.
Ad esempio:
struct A {};
struct B { A a; };
namespace N {
struct B { int a; };
void f()
{
A (::B::*p) = &::B::a; // this() cannot be omitted
}
}
Se ()
viene omesso nel codice precedente, compilatore riconosce un consecutivo nidificata nome specificatore A::B
anziché A
e ::B
, ed emetterà un errore.
Questa parentesi è necessaria, ma a volte conduce a una situazione fuorviante.
struct A {
int m;
A() {}
A(int) {} // this isn't called
};
int i;
int main()
{
A(i); // this is a declaration
i.m = 1; // ok
}
Nel codice precedente, A(i)
è una dichiarazione (e anche una definizione in questo caso) di un oggetto i
, anziché un'espressione chiamata costruttore con un int
argomento i
.
Spero che questo aiuti.
fonte
2011-01-18 21:54:55
Mentre questa è la sintassi perfettamente legale per la dichiarazione di un numero intero, per il piacere dei tuoi colleghi sviluppatori lo cambia in 'int m;'. –