Structure Definitions [требует правки]

333
14 января 2017, 12:49

Прочел в книгах не очень-то понял про Structure Definitions C++. Вкратце объясните плес.

Answer 1

С точки зрения объявления переменных Foo на языке C++ нет разницы, как определить Foo. После того, как Foo была определена либо через struct, либо через typedef struct, можно объявлять переменные Foo так:

Foo bar;

Однако между struct и typedef struct различие есть, и оно тонкое. Дело в том, что struct определяет новый тип. В отличие от этого typedef struct никакого типа не определяет, он только создает ссылку (alias) с именем Foo (ни в коем случае не новый тип) на неименованный тип struct.

Спецификатор typedef. Имя, заданное с участием спецификатора typedef, становится специальным именем. В области действия этой декларации typedef-имя синтаксически эквивалентно ключевому слову и именам типа, связанного с идентификатором. Таким образом, typedef-name является синонимом другого типа. Так что typedef-имя НЕ СОЗДАЕТ НОВЫЙ ТИП, как это делается при декларации класса или enum.

Если декларация определяет неименованный класс (или перечисление enum), первое typedef-имя, заданное в декларации, типа класса (или типа enum) используется для обозначения типа класса (или типа enum) только для целей линковки. Пример:

typedef struct { } *ps, S; // S является именем класса для линковки
READ ALSO
Как вызвать родительский метод из тела перегруженного в С++?

Как вызвать родительский метод из тела перегруженного в С++?

Есть классУ него есть другой класс-наследник

336
Перенос rich текста между редакторами

Перенос rich текста между редакторами

Подскажите, как переносится форматирование и rich текст при копировании между совершенно разными редакторами, например Google Docs в браузере и Word на ПКЧто...

399
Изменение .bin в с++

Изменение .bin в с++

Имеется бинарный файл, логически разделенный на несколько частейПроблема в том, что я не хочу загружать всю информацию в оперативную память,...

406