In C, dobbiamo usare un prefisso struct ogni volta che vogliamo dichiarare o definire una struttura. Tuttavia, le cose sono state cambiate una volta che la struttura è diventata una specie di classe in C++. Non abbiamo più bisogno di usare un prefisso struct
quando dichiariamo una struttura. In questo senso, immagino che il tag della struttura in C
sia diventato un nome di un tipo in C++
.Non riesco a capire la dichiarazione della struttura in C++
Tuttavia, ciò non significa che non è possibile utilizzare un prefisso struct
. Possiamo ancora utilizzare un prefisso struct
. Ad esempio, Bjarne Stroustrup, il creatore di C++, introduce un esempio di dichiarazione di una struttura con e senza prefisso struct
, il che mi rende perplesso.
Di seguito sono riportate le definizioni di struttura che tentano di creare una struttura con argomento modello T. Queste vengono compilate correttamente senza errori.
template<class T> struct linked_list {
T element;
linked_list<T> *next;
};
template<class T> struct linked_list {
T element;
struct linked_list<T> *next;
};
Ora, di seguito sono riportate le dichiarazioni di funzione il cui tipo di ritorno e tipo di argomento sono strutture. Anche se questi non sono molto diverse da quanto sopra, il primo dal basso due dichiarazioni di funzione, quello con un prefisso struct, mi dà un errore con Visual Studio C++ 2012
template<class T> struct linked_list<T> *add_list(T element, struct linked_list<T> *tail);
template<class T> linked_list<T> *add_list(T element, linked_list<T> *tail);
Io davvero non capisco come le cose funzionano Non capisco le differenze tra queste dichiarazioni. Qualcuno potrebbe darmi una spiegazione dettagliata?
Stai chiedendo perché puoi omettere la parola chiave 'struct' in C++? [Perché C ha bisogno della parola chiave "struct" e non del C++?] (Http://stackoverflow.com/questions/8422775/why-does-c-need-struct-keyword-and-not-c) – Blastfurnace
Che compilatore sei usando? Non tutti i C++ sono conformi agli standard. – Anycorn
@ Blastfurnace Grazie. Tuttavia, ho ancora una domanda. Il link che mi hai dato ha detto che se non c'è ambiguità il C++ 'permette' l'omissione della parola chiave struct. Significa che possiamo ancora usare la parola chiave struct. Ne consegue che c'è un'ambiguità nei miei secondi codici perché mi dà un errore. Tuttavia, non vedo alcuna ambiguità. Cosa c'è che non va? – isbae93