|
C++
для начинающих |
3.12. Директива 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;
Назад Вперед
|