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