我有一个返回const A&。
的方法如果我想使用auto,那么正确的方法是什么。这样好吗?
const auto &items = someObject.someMethod();
我看到有人这样做:
auto &items = someObject.someMethod();
我不确定使用哪一个,真正有什么不同......
编辑:
在这种情况下,这两个是等价的吗?
auto items = someObject.someMethod();
auto &items = someObject.someMethod();
答案 0 :(得分:12)
即使这两种形式在本例中是等效的,我仍会选择第一种形式,因为它更好地传达了你的代码片段不需要修改对象状态的事实由someMethod()
返回。
所以我的建议就是这样做:
const auto &items = someObject.someMethod();
答案 1 :(得分:7)
在你的情况下,没有区别。在这两种情况下,auto
代表的类型将推断为const A
,因此items
的类型将为const A&
。
代码的“自我记录语义”有所不同。 const auto &
明确指出“我想要引用返回的内容,我不会修改它。”只是auto &
简单地说“我想要引用返回的内容。”
答案 2 :(得分:7)
更明确通常更好,例外是关注点的分离。不应在接口的客户端提及实现细节。
如果接收者不应该关心如何接收物体,那么完美转发是可行的方法。
auto && items = someObject.someMethod();
允许在const
中推断auto
,例如,将临时值绑定到auto &
对我来说是一个主要的代码味道。
auto const &
应该是只读的auto &
应该是读写auto &&
应该意味着抓住所有人,或许采用价值回归对象