Читать «Эффективный и современный С++. 42 рекомендации по использованию С++11 и С++14» онлайн - страница 33
Скотт Мейерс
Для начала сделайте глубокий вдох и расслабьтесь. Применение auto
— возможность, а не требование. Если, в соответствии с вашими профессиональными представлениями, ваш код будет понятнее или легче сопровождаемым или лучше в каком-то ином отношении при использовании явных объявлений типов, вы можете продолжать их использовать. Но имейте в виду, что С++ — не первый язык, принявший на вооружение то, что в мире языков программирования известно как
Некоторых разработчиков беспокоит тот факт, что применение auto
исключает возможность определения типа при беглом взгляде на исходный текст. Однако возможности IDE показывать типы объектов часто устраняют эту проблему (даже если принять во внимание обсуждавшиеся в разделе 1.4 вопросы, связанные с выводом типов в IDE), а во многих случаях абстрактный взгляд на тип объекта столь же полезен, как и точный тип. Зачастую достаточно, например, знать, что объект является контейнером, счетчиком или интеллектуальным указателем, не зная при этом точно, каким именно контейнером, счетчиком или указателем. При правильном подборе имен переменных такая абстрактная информация о типе почти всегда оказывается под рукой.
Суть дела заключается в том, что явно указываемые типы зачастую мало что дают, кроме того что открывают возможности ошибок — в плане как корректности, так и производительности программ. Кроме того, типы auto
автоматически изменяются при изменении типов инициализирующих их выражений, а это означает облегчение выполнения рефакторинга при использовании auto
. Например, если функция объявлена как возвращающая int
, но позже вы решите, что long
вас больше устраивает, вызывающий код автоматически обновится при следующей компиляции (если результат вызова функции хранится в переменной, объявленной как auto
). Если результат хранится в переменной, объявленной как int
, вы должны найти все точки вызова функции и внести необходимые изменения.