Як і цей розробник, я ненавиджу auto. Вірніше, я ненавиджу , як люди зловживають auto.
Я вважаю, що я autoдопомагаю вам написати загальний код, а не для скорочення набору тексту .
C ++ - це мова, мета якої - дозволити писати надійний код, а не мінімізувати час розробки.
Це досить очевидно з багатьох функцій C ++, але, на жаль, кілька нових, таких як, autoщо зменшують набір тексту, що вводить людей в оману, думаючи, що вони повинні почати лінуватися.
У попередні autoдні люди використовували typedefs, що було чудово, тому що typedef дозволив дизайнеру бібліотеки допомогти вам зрозуміти, яким повинен бути тип повернення, щоб їхня бібліотека працювала так, як очікувалося. Під час використання autoви знімаєте цей контроль у дизайнера класу і замість цього просите компілятора розібратися, яким він повинен бути тип, який видаляє один із найпотужніших інструментів C ++ з панелі інструментів і ризикує порушити їх код.
Як правило, якщо ви використовуєте auto, це має бути тому, що ваш код працює для будь-якого розумного типу , а не тому, що ви просто лінь записати тип, з яким він повинен працювати. Якщо ви використовуєте autoяк інструмент для допомоги ліні, то, що трапляється, ви, зрештою, починаєте вводити в свою програму непомітні помилки , як правило, спричинені неявними перетвореннями, які не відбулися через те, що ви використовували auto.
На жаль, ці помилки важко проілюструвати в короткому прикладі тут , тому що їх стислість робить їх менш переконливими , ніж фактичні приклади , які приходять в призначеному для користувача проект - тим НЕ менш, вони відбуваються легко в шаблонах важкого коду , який очікують деякі неявні перетворень прийняти місце.
Якщо ви хочете приклад, є один тут . Невелика примітка, однак: перед тим, як спробувати стрибнути і критикувати код: пам’ятайте, що багато відомих і зрілих бібліотек було розроблено навколо таких неявних перетворень, і вони є там, оскільки вони вирішують проблеми, які можуть бути важкими, якщо не неможливими вирішити інакше. Спробуйте знайти краще рішення, перш ніж критикувати їх.