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

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。关于这一点的讨论可以在这个元问题中找到。


回首忆惘然
浏览 404回答 3
3回答

慕森王

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

慕姐8265434

我认为auto只要很难说第一眼看到如何写类型就应该使用关键字,但表达式右侧的类型是显而易见的。例如,使用:my_multi_type::nth_index<2>::type::key_type::composite_key_type::&nbsp; &nbsp; key_extractor_tuple::tail_type::head_type::result_type获取复合键类型boost::multi_index,即使你知道它是int。你不能只是写,int因为它可以在将来改变。我会写auto这个案子。因此,如果auto关键字提高了特定情况下的可读性,则使用它。auto当读者明白哪种类型auto代表时,你可以写。这里有些例子:auto foo = std::make_shared<Foo>();&nbsp; &nbsp;// obviousauto foo = bla();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// unclear. don't know which type `foo` hasconst size_t max_size = 100;for ( auto x = max_size; x > 0; --x ) // unclear. could lead to the errors&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // since max_size is unsignedstd::vector<some_class> v;for ( auto it = v.begin(); it != v.end(); ++it )&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // ok, since I know that `it` has an iterator type&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // (don't really care which one in this context)
打开App,查看更多内容
随时随地看视频慕课网APP