Язык программирования C++. Вводный курс
508 Resource Limit Is Reached

Resource Limit Is Reached

The website is temporarily unable to service your request as it exceeded resource limit. Please try again later.

Директива typedef


Директива typedef

позволяет задать синоним для встроенного либо пользовательского типа данных. Например:

typedef double      wages;

typedef vector<int> vec_int;

typedef vec_int     test_scores;

typedef bool        in_attendance;

typedef int         *Pint;

Имена, определенные с помощью директивы typedef, можно использовать точно так же, как спецификаторы типов:

// double hourly, weekly;

wages hourly, weekly;

// vector<int> vecl( 10 );

vec_int vecl( 10 );

 

// vector<int> test0( c1ass_size );

const int c1ass_size = 34;

test_scores test0( c1ass_size );

 

// vector< bool > attendance;

vector< in_attendance > attendance( c1ass_size );

 

// int *table[ 10 ];

Pint table [ 10 ];

Эта директива начинается с ключевого слова typedef, за которым идет спецификатор типа, и заканчивается идентификатором, который становится синонимом для указанного типа.

Для чего используются имена, определенные с помощью директивы typedef? Применяя мнемонические имена для типов данных, можно сделать программу более легкой для восприятия. Кроме того, принято употреблять такие имена для сложных составных типов, в противном случае воспринимаемых с трудом (см. пример в разделе 3.14), для объявления указателей на функции и функции-члены класса (см. раздел 13.6).

Ниже приводится пример вопроса, на который почти все дают неверный ответ. Ошибка вызвана непониманием директивы typedef как простой текстовой макроподстановки. Дано определение:

typedef char *cstring;

Каков тип переменной cstr в следующем объявлении:

extern const cstring cstr;

Ответ, который кажется очевидным:

const char *cstr

Однако это неверно. Спецификатор const

относится к cstr, поэтому правильный ответ – константный указатель на char:

char *const

cstr;




Начало  Назад  Вперед


508 Resource Limit Is Reached

Resource Limit Is Reached

The website is temporarily unable to service your request as it exceeded resource limit. Please try again later.