Отличие тэгов в struct, enum итд

Чем отличается тэг в начале struct от тэга в конце?

enum EnumTag{

} EnumTag2;
class ClassTag{

} ClassTag2;

Чем вот отличаются эти тэги?


Ответы (2 шт):

Автор решения: Sheridan

В первом случае это часть имени перечисления (класса), во втором случае это часть имени объекта-экземпляра перечисления (класса).

→ Ссылка
Автор решения: user7860670

В С имя структуры (struct) / перечисления (enum) / объединения (union) состоит из двух частей - ключевого слова struct / enum / union и опционального тэга. Чтобы не писать каждый раз ключевое слово типичным приемом в С является объявление алиаса для типа одновременно с объявлением / определением типа:

typedef enum EnumTag
{

} EnumTag2;

EnumTag var1; // не работает
enum EnumTag var1; // работает
EnumTag2 var2; // работает благодаря наличию typedef

В С++ же правила изменили и тэг стал class name и получил возможность быть использованным в большинстве контекстов сам по себе без указания ключевого слова.


без `typedef` в начале, как в вопросе, `EnumTag2` будет переменной.
→ Ссылка