Если оставить в стороне тот факт, что существуют типы, которые не могут быть названы (например, тип замыкания) или могут быть названы только с громоздким, повторяющимся и (следовательно) подверженным ошибкам decltype
, использование auto
позволяетупущение нерелевантной или бесполезной информации, которая в противном случае поглощает часть внимания читателя.
const auto c=mapping.key_comp();
const typename decltype(mapping)::key_compare c=mapping.key_comp();
Какую информацию добавляет вторая строка выше той, которая указана первой?
using vvi=typename std::vector<std::vector<int>>::iterator;
const vvi e=vec.end(),b=std::lower_bound(vec.begin(),e,x);
for(vvi i=b;i!=e;++i) // ...
typedef-name , подобное этому, должно быть введено в каждую функцию, которая его использует (более одного раза), предлагая внимательному читателю изучить каждый экземпляр, чтобы проверить их эквивалентность, или его следует поместить в более крупную область видимости.(и часто это другой файл!), который затем загрязняет его бессмысленное имя.
Этот вид шума не не мешает читать код, конечно, но он замедляет процесс, такойчто любой крайний срок будет уменьшать понимание, что, в свою очередь, повредит отладке.