Есть по крайней мере 3 причина, почему я использую определения типов, наиболее/все из которых были охвачены в ответах уже:
- упрощение:
typedef int (*funcptr)(char, unsigned long);
funcptr f; // f is a ptr to a function taking char & unsigned long, returning an int
typedef std::vector<Record> Container;
Container c; // c is a vector of Records
- инкапсуляция:
typedef unsigned short int MY_COUNTER;
MY_COUNTER c;
Теперь, если позже, я хочу сделать MY_COUNTER
больше, я просто изменяю typedef и обновляется весь встречный код (после перекомпиляции). Обратите внимание: если бы я использовал unsigned short int
явно везде для счетчика, мне пришлось бы просматривать все файлы и менять только unsigned short int
для счетчика; Я не могу просто глобально заменить unsigned short int
во всем коде, потому что я мог бы использовать его для других вещей, кроме счетчика.
- портативность
typedef unsigned short UINT16;
Теперь, когда я иду на другую платформу, я просто карта UINT16
к чему-то еще (например, unsigned long
) в одном месте (заголовочный файл), но все мой код все еще работает (после перекомпиляции). Почти как «брандмауэр типа» - он предотвращает распространение изменений платформы во всех кодах. Любой разработчик (особенно встроенные разработчики, которые всегда используют w/code на нескольких архитектурах &), которым когда-либо приходилось проходить через большую кодовую базу C или C++ &, меняют все вхождения int
на short int
или что бы это ни было связано с этим.
Обратите внимание, что для любого недавнего компилятором, использованиеstdint.h
часто доступны & лучший способ приблизиться к платформе портативность. Но я работаю над многими системами, где компилятор старше &stdint.h
не существует (или его необходимо создать).
Есть много других хорошие применения для определений типов, особенно, как вы делаете больше работы с шаблонами, но эти 3 ситуаций являются одними из наиболее распространенных, полезных и интуитивных/очевидных применений (по крайней мере, ИМО).
Возможный дубликат [C++ typedef question ... easy one ..] (http://stackoverflow.com/questions/1664028/c-typedef-question-easy-one) – marcog