很多人为'auto'
辩护,声称这有助于他们更快地输入很长的类型名称,并帮助您使代码更加整洁。但我相信这在调试过程中会付出巨大的代价。至少对我来说,像'int', 'char', 'string', etc.
这样的返回类型的显式规范比使用神秘的关键字'auto'
将所有内容隐藏在地毯下,然后在调试过程中尝试找出头尾要有用,当你的代码已经变得太复杂了。语法'typedef'
实际上似乎更有利于提供具有一些定义含义的'auto'
的好处,以便于引用和快速识别返回类型中的用法含义......'auto'
比使用'typedef'
更有帮助吗?在调试过程中'auto'
无益的指控的有效脱轨是什么?
撇开有些类型不能命名(如闭包类型(或只能用繁琐、重复和(因此(容易出错的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必须在使用它的每个函数中引入(不止一次(,邀请细心的读者检查每个实例以验证它们的等效性,或者必须放在更大的范围内(通常是不同的文件!(,然后它的无意义名称会污染。
当然,这种噪音不会阻止阅读代码,但它会减慢过程,因此任何截止日期都会减少理解,进而损害调试。