我开始学习C++11,目前对于 "auto" 关键字有爱恨交加的感觉。
毫无疑问,它很方便。
但它也很令人困惑,以下是一段代码:
auto w = foo->get_w();
auto i = w->get_i();
bar(i);
在这段代码中,
get_w()
函数返回 "struct S*",这是 w 的类型。但是 struct S 有两个重载的 get_i() 函数:const I* get_i() const;
unique_ptr<I>& get_i();
因为w不是const,所以第二个get_i()被调用,因此bar(i)应该改成bar(move(i)), 因为bar()的签名是void bar(unique_ptr<I>)。
但是实际上,很容易就会迷失方向。
这在编译时被捕获是很好的,但我想我的初步热情正在减退。
你怎么想?有什么提示吗?
S
的作者进行交流。 - milleniumbugauto
很棒,而另一些人则讨厌它,还有介于两者之间的微妙差别。选择你自己的微妙差别吧 :) 我确实同意有时会感到困惑,但另一方面,我大多数情况下都使用auto
来进行迭代器操作。我遵循的一个经验法则是它不应该令人困惑。然后,“困惑”的定义可能因人而异... - JBLget_i()
返回一个unique_ptr<I>&
,那么auto i = w->get_i();
将无法编译。 - T.C.auto
,而在于选择了像foo
、get_w
、get_i
和bar
这样糟糕的命名。 - fredoverflow