Sto solo chiedendo in contesto di C++.Qual è la differenza tra queste due dichiarazioni?
struct x1 { ... };
typedef struct { ... } x2;
int main()
{
x1 a;
x2 b;
}
Sto solo chiedendo in contesto di C++.Qual è la differenza tra queste due dichiarazioni?
struct x1 { ... };
typedef struct { ... } x2;
int main()
{
x1 a;
x2 b;
}
La prima definisce una classe con il nome x1
.
Il secondo definisce una classe senza nome e definisce anche un alias di tipo, con il nome x2
.
La differenza è molto sottile in C++. È possibile osservare la differenza cercando di dichiarare una funzione con lo stesso nome:
void x1(); // OK
void x2(); // not OK, redefined as a different type of symbol
In pratica, si dovrebbe evitare la definizione di una funzione con lo stesso nome di una classe all'interno dello stesso spazio dei nomi, quindi questa differenza viene quasi mai su. Il primo è in genere preferito perché è più semplice.
In C, lo difference influenza ulteriormente l'uso dell'identificatore.
In C++, non c'è differenza (ma in C) – deviantfan