C では、構造体を宣言または定義するときはいつでも構造体プレフィックスを使用する必要があります。ただし、構造が c++ の一種のクラスになると、状況が変わります。struct
構造体を宣言するときに接頭辞を使用する必要がなくなりました。C
この流れで、 の構造体タグが の型の名前になったと思いC++
ます。
struct
ただし、プレフィックスを使用できないという意味ではありません。まだstruct
プレフィックスを使用できます。たとえば、c++ の作成者である Bjarne Stroustrup は、構造体をプレフィックス付きとstruct
プレフィックスなしで宣言する例を紹介していて、戸惑います。
以下は、テンプレート引数 T を持つ構造体を作成しようとする構造体定義です。これらはエラーなしで正常にコンパイルされます。
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;
};
さて、以下は戻り値の型と引数の型が構造体である関数宣言です。これらは上記とそれほど違いはありませんが、以下の 2 つの関数宣言の最初のもので、構造体プレフィックスが付いているもので、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);
私は物事がどのように機能するかを本当に理解していません。これらの宣言の違いがわかりません。誰か詳細な説明をくれませんか?