为了账号安全,请及时绑定邮箱和手机立即绑定

C ++ 11 auto关键字多少钱太多了?

C ++ 11 auto关键字多少钱太多了?

C++
回首忆惘然 2019-08-06 15:14:58
C ++ 11 auto关键字多少钱太多了?我一直在使用autoC ++ 11标准中提供的新关键字来处理复杂模板类型,这是我认为它的设计目标。但我也用它来做:auto foo = std::make_shared<Foo>();更加怀疑的是:auto foo = bla(); // where bla() return a shared_ptr<Foo>我没有看到很多关于这个话题的讨论。似乎auto可能过度使用,因为类型通常是文档和健全性检查的一种形式。您在哪里绘制使用线auto以及此新功能的推荐用例是什么?澄清:我不是要求哲学观点; 我要求标准委员会对该关键字的预期用途,可能还有关于如何在实践中实现该预期用途的评论。旁注:此问题已移至SE.Programmers,然后返回Stack Overflow。关于这一点的讨论可以在这个元问题中找到。
查看完整描述

3 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

尽可能auto在任何地方使用- 特别是const auto这样可以减少副作用。除了明显的情况外,您不必担心类型,但它们仍然会为您进行静态验证,并且您可以避免重复。在auto不可行的地方,您可以使用decltype语义表达类型作为基于表达式的契约。您的代码看起来会有所不同,但这将是一个积极的变化。


查看完整回答
反对 回复 2019-08-06
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

我认为auto只要很难说第一眼看到如何写类型就应该使用关键字,但表达式右侧的类型是显而易见的。例如,使用:


my_multi_type::nth_index<2>::type::key_type::composite_key_type::

    key_extractor_tuple::tail_type::head_type::result_type

获取复合键类型boost::multi_index,即使你知道它是int。你不能只是写,int因为它可以在将来改变。我会写auto这个案子。


因此,如果auto关键字提高了特定情况下的可读性,则使用它。auto当读者明白哪种类型auto代表时,你可以写。


这里有些例子:


auto foo = std::make_shared<Foo>();   // obvious

auto foo = bla();                     // unclear. don't know which type `foo` has


const size_t max_size = 100;

for ( auto x = max_size; x > 0; --x ) // unclear. could lead to the errors

                                      // since max_size is unsigned


std::vector<some_class> v;

for ( auto it = v.begin(); it != v.end(); ++it )

                                      // ok, since I know that `it` has an iterator type

                                      // (don't really care which one in this context)



查看完整回答
反对 回复 2019-08-06
  • 3 回答
  • 0 关注
  • 403 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信