考虑到其他好处,关键字 'auto' 真的有助于简化 C++ 中的调试吗?
Given other benefits, does the keyword 'auto' really help make debugging easier in C++?
很多人为 'auto'
辩护,声称它可以帮助他们更快地防止输入很长的类型名称,并帮助您使代码更整洁。但我相信这会在调试过程中付出巨大的代价.至少对我来说,像 'int', 'char', 'string', etc.
这样的 return 类型的显式规范比使用神秘关键字 'auto'
隐藏所有内容然后在调试过程中试图弄清楚头部和尾部更有帮助当您的代码已经变得太复杂时。语法 'typedef'
似乎实际上更有益于提供具有某些定义含义的 'auto'
的好处,因此很容易参考并快速识别 return 类型中用法的含义。 .. 'auto'
比使用 'typedef'
有什么帮助?对于 'auto'
在调试过程中没有好处的指控,什么是有效的出轨?
抛开有些类型无法命名(如闭包类型)或只能使用繁琐、重复且(因此)容易出错的方式命名的事实 decltype
,使用auto
允许省略不相关或无用的信息,否则会吸引 reader.
的部分注意力
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 必须在每个使用它的函数中引入(不止一次),请仔细 reader 检查每个实例以验证它们的等价性,或者必须放在更大的范围(通常是不同的文件!),然后它的无意义的名称会污染。
当然,这种噪音不会阻止阅读代码,但它会减慢进程,因此任何截止日期都会 减少理解,这反过来又会损害调试。
很多人为 'auto'
辩护,声称它可以帮助他们更快地防止输入很长的类型名称,并帮助您使代码更整洁。但我相信这会在调试过程中付出巨大的代价.至少对我来说,像 'int', 'char', 'string', etc.
这样的 return 类型的显式规范比使用神秘关键字 'auto'
隐藏所有内容然后在调试过程中试图弄清楚头部和尾部更有帮助当您的代码已经变得太复杂时。语法 'typedef'
似乎实际上更有益于提供具有某些定义含义的 'auto'
的好处,因此很容易参考并快速识别 return 类型中用法的含义。 .. 'auto'
比使用 'typedef'
有什么帮助?对于 'auto'
在调试过程中没有好处的指控,什么是有效的出轨?
抛开有些类型无法命名(如闭包类型)或只能使用繁琐、重复且(因此)容易出错的方式命名的事实 decltype
,使用auto
允许省略不相关或无用的信息,否则会吸引 reader.
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 必须在每个使用它的函数中引入(不止一次),请仔细 reader 检查每个实例以验证它们的等价性,或者必须放在更大的范围(通常是不同的文件!),然后它的无意义的名称会污染。
当然,这种噪音不会阻止阅读代码,但它会减慢进程,因此任何截止日期都会 减少理解,这反过来又会损害调试。