Как этот разработчик, я ненавижу auto
. Вернее, я ненавижу, как люди злоупотребляют auto
.
Я придерживаюсь (сильного) мнения, что auto
он помогает вам писать общий код, а не сокращает набор текста .
C ++ - это язык, цель которого - позволить вам написать надежный код, а не минимизировать время разработки.
Это довольно очевидно из многих возможностей C ++, но, к сожалению, некоторые из более новых, подобных auto
этому, уменьшают типизацию, вводя людей в заблуждение, заставляя их думать, что им следует начать лениться при наборе текста.
В предварительные auto
дни, люди использовали typedef
s, который был большим , потому что typedef
позволили дизайнеру библиотеки , чтобы помочь вам понять, что тип возвращаемого значения должен быть, так что их библиотека работает , как ожидалось. При использовании auto
вы забираете этот элемент управления у дизайнера класса и вместо этого просите компилятор выяснить, каким должен быть тип, что удаляет один из самых мощных инструментов C ++ из набора инструментов и рискует нарушить их код.
Как правило, если вы используете auto
, это должно быть потому, что ваш код работает для любого разумного типа , а не потому , что вам просто лень записывать тип, с которым он должен работать. Если вы используете auto
в качестве инструмента для облегчения лени, то в конечном итоге вы начинаете вносить незначительные ошибки в вашу программу, обычно вызванные неявными преобразованиями, которых не было, потому что вы использовали auto
.
К сожалению, эти ошибки трудно проиллюстрировать в коротком примере здесь, потому что их краткость делает их менее убедительными, чем реальные примеры, которые появляются в пользовательском проекте - однако, они легко встречаются в коде с большим количеством шаблонов, который ожидает, что определенные неявные преобразования потребуют место.
Если вы хотите пример, есть один здесь . Небольшое замечание: прежде чем испытывать искушение прыгать и критиковать код: имейте в виду, что многие известные и зрелые библиотеки были разработаны для таких неявных преобразований, и они существуют потому, что решают проблемы, которые могут быть трудными, если не невозможными. решить иначе. Попробуйте найти лучшее решение, прежде чем критиковать их.