考虑到其他好处,关键字'auto'真的有助于简化调试C++吗?



很多人为'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必须在使用它的每个函数中引入(不止一次(,邀请细心的读者检查每个实例以验证它们的等效性,或者必须放在更大的范围内(通常是不同的文件!(,然后它的无意义名称会污染。

当然,这种噪音不会阻止阅读代码,但它会减慢过程,因此任何截止日期都会减少理解,进而损害调试。

最新更新