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