В C++ (и особенно в C) типы обычно всегда представлены их конструкцией.
Например,
enum Foo { ... };
void doSomethingWithAFoo(enum Foo f);
struct Bar { ... };
void doSomethingWithABar(struct Bar bar);
Хотя это требуется в C, это не в C++. В C это достигается с помощью typedef
.
typedef struct { ... } Foo; // Can now be referenced with just `Foo`
Однако есть определенная часть спецификации, которая гласит, что типы структуры не могут иметь экземпляра себя внутри них (более конкретно говорится типы не могут относиться к себе, прежде чем они полностью объявлены) ,
За исключением формы указателя. Это связано с тем, что указатели известны в начале компиляции, тогда как структуры известны только после их объявления.
С struct
сек предшествуют C++ (только немного) и присутствует с ANSI C (C89) и до этого в большинстве крупных составителей, они также присутствуют в C++ (с ANSI C может быть скомпилирован изящно совместимые компиляторы C++).
Однако C++ добавляет понятие классов, которые не имеют. На C. Как упоминалось выше, классы и структуры аналогичны тем, что они оба содержат элементы. В C++ структуры могут иметь методы, подобные классам - очевидно, это не так. C.
Единственная разница, насколько мне известно, - это видимость; struct
По умолчанию для общего доступа и class
es по умолчанию для частного. C не имеет понятия видимости.
'struct' и' class' - это по сути то же самое в C++. Единственное отличие состоит в том, что члены 'struct' являются' public' по умолчанию, а члены 'class' являются' private' по умолчанию. По этой причине обычно использовать 'class' в любое время, когда вы хотите инкапсулировать, и' struct', когда вы просто хотите собрать вместе связанных публичных элементов данных, например. [ 'Станд :: pair'] (http://en.cppreference.com/w/cpp/utility/pair). – JBentley
Это было ответило ранее: http://stackoverflow.com/a/7729819/1236397 –
Почему вы не могли просто написать «Node * left, * right» вместо «struct Node» left, * right » – djfkdjfkd39939