Отличие тэгов в struct, enum итд
Чем отличается тэг в начале struct от тэга в конце?
enum EnumTag{
} EnumTag2;
class ClassTag{
} ClassTag2;
Чем вот отличаются эти тэги?
Ответы (2 шт):
В первом случае это часть имени перечисления (класса), во втором случае это часть имени объекта-экземпляра перечисления (класса).
В С имя структуры (struct) / перечисления (enum) / объединения (union) состоит из двух частей - ключевого слова struct / enum / union и опционального тэга. Чтобы не писать каждый раз ключевое слово типичным приемом в С является объявление алиаса для типа одновременно с объявлением / определением типа:
typedef enum EnumTag
{
} EnumTag2;
EnumTag var1; // не работает
enum EnumTag var1; // работает
EnumTag2 var2; // работает благодаря наличию typedef
В С++ же правила изменили и тэг стал class name и получил возможность быть использованным в большинстве контекстов сам по себе без указания ключевого слова.
без `typedef` в начале, как в вопросе, `EnumTag2` будет переменной.