Введение в язык Си++

Определение типа typedef


Описания, содержащие спецификатор_описания typedef, определяют идентификаторы, которые позднее могут использоваться так, как если бы они были ключевыми словами типа, именующее основные или производные типы.

typedef-имя: идентификатор

Внутри области видимости описания, содержащего typedef, каждый идентификатор, возникающий как часть какого-либо описателя, становится в этом месте синтаксически эквивалентным ключевому слову типа, которое именует тип, ассоциированный с идентификатором таким образом, как описывается в #8.4. Имя класса или перечисления также является typedef-именем. Например, после

typedef int MILES, *KLICKSP; struct complex { double re, im; };

каждая из конструкций

MILES distance; extern KLICKSP metricp; complex z, *zp;

является допустимым описанием; distance имеет тип int, metricp имеет тип "указатель на int".

typedef не вводит новых типов, но только синонимы для типов, которые могли бы быть определены другим путем. Так в приведенном выше примере distance рассматривается как имеющая в точности тот же тип, что и любой другой int объект.

Но описание класса вводит новый тип. Например:

struct X { int a; }; struct Y { int a; }; X a1; Y a2; int a3;

описывает три переменных трех различных типов.

Описание вида

описание_имени: агрег идентификатор ; enum идентификатор ;

определяет то, что идентификатор является именем некоторого (возможно, еще не определенного) класса или перечисления. Такие описания позволяют описывать классы, ссылающихся друг на друга. Например:

class vector; class matrix { ... friend matrix operator* (matrix,vector); };

class vector { ... friend matrix operator* (matrix,vector); };



Содержание раздела