На данный вопрос уже ответили:
Зачем нужен typedef?
2 ответа
В чем разница между typedef struct/class и пользовательским типом, созданным с помощью struct/class? Да, я понимаю, что typedef не создаёт новый тип, а делает всего лишь дополнительное имя для данного типа, но все таки, неужели создание типа так невыгодно?
typedef:
typedef struct {
int size;
int * massive;
} MyStr;
Тип:
struct MyStr{
int size;
int * massive;
};
Ответ
В Си++ разницы особой нет, разница есть в чистом Си. И в Си++ это используется, скорее, как пережиток Си.
В языке Си есть 4 типа пространств имен:
1) Метки (используется в конструкциях goto)
2) Тэги (имена структур, объединений и перечислений)
3) Члены структур и объединений
4) Все остальное (имена функций, объектов, констант и все typedefы).
Так же стандарт Си требует (C11 6.2.3) раздельное пространство имен для каждой из этих категорий. Ну и все компиляторы и IDE в целом поддерживают этот стандарт. То есть, все эти элементы создаются в разных пространствах имен. Поэтому, например, такой код
struct myStruct {};
myStruct str;
не скомпилируется компилятором Си (но скомпилируется Си++), потому что тип myStruct находится в раздельном пространстве имен (не в том, в котором создается переменная str). Что бы такой код работал, str нужно объявлять так:
struct myStruct str;
Что бы не писать слово struct перед каждым объявлением переменной можно использовать прием с typedef. Т.к. все, что объявлено через typedef помещается в более общее пространство имен (в то же, где и все остальные объекты), то теперь нет необходимости писать слово struct перед каждым объявлением.
Комментариев нет:
Отправить комментарий