Когда целесообразно использовать 'auto' в С++?

Я изо всех сил пытаюсь придумать для себя некоторые непротиворечивые правила, когда нужно использовать "auto" в программе на С++. Вот мои списки pro/con, возможно, вы можете помочь мне, предоставив мне свой вклад.

Pro:

  • 'auto' хорош для предотвращения сложных и больших объявлений шаблонов (например, классический вариант использования auto для определения переменной итерации по контейнеру STL)

  • 'auto' хорош для кода будущей проверки. Например, если у меня есть массив int, и я хочу изменить его на unsigned ints, если я использовал "auto", когда я обращаюсь к элементам этого массива, все будет автоматически обновляться. Конечно, это также произошло бы, если бы я использовал typedef для массива.

Минусы:

  • 'auto' затрудняет чтение кода. Я понятия не имею, является ли объявление указателем или значением. Я понятия не имею, может ли он иметь конструктор и деструктор.

  • 'auto' делает меня ленивым. Я могу забыть о типах и просто писать код. Но в С++ типы очень важны для семантики программы.

Когда вы, ребята, используете Auto? и когда вы предпочитаете не использовать его?