typedef (ы) позволяют отделять реализации от интерфейсов.
Взять на себя внимание, что на раннем этапе C++ не определяет auto
, как он определен сейчас, и decltype
отсутствовал в стандарте.
Но даже сейчас, когда у вас есть auto
и decltype
, иногда лучше указать тип объекта. В противном случае код может быть трудно читаемым или может привести к ошибкам.
Рассмотрим простой пример с спецификатор типа auto
unsigned int x = 0;
long y = 0;
auto p = new auto(x + y);
Можете ли вы сказать, что тип указателя р?
Является ли выражение *p
неподписанного типа или подписи?
Ответ зависит от используемой платформы. Тип p может быть либо long *
, либо unsigned long *
.
Аналогичная проблема существует для стандартных контейнеров. Таким образом, Стандарт вводит имена общего типа, такие как size_type
, который гарантирует, что этот тип является неподписанным, но его ширина может варьироваться в зависимости от платформы.
Также это позволяет писать общий код.
В моем профиле есть ссылка на мою статью, где показана проблема, связанная с тем, что стандартный класс std::bitset
не имеет общего типа size_type
. В этом случае, если вам нужно заменить пример класса std::vector<bool>
на std::bitset
, вам необходимо изменить код везде, где было использовано либо size_type
, либо явный тип, например size_t
.
Просьба указать конкретный * пример *, где «вещи, такие как' auto' и 'decltype'» выполняют эту работу, и где ранее публичный 'typedef' должен был использоваться. –
Я думаю, что эти типы существуют, так что различные типы признаков, используемые алгоритмами в заголовке алгоритма, не будут явно создаваться для каждого типа контейнера. – StoryTeller
Он также помогает читабельности и ремонтопригодности. –