我有一个返回const A&的方法.
如果我想使用auto,那么正确的方法是什么.这个可以吗?
const auto &items = someObject.someMethod();
Run Code Online (Sandbox Code Playgroud)
我看到有些人这样做:
auto &items = someObject.someMethod();
Run Code Online (Sandbox Code Playgroud)
我不确定使用哪一个,真的有什么区别......
编辑:
在这种情况下,这两个是等价的吗?
auto items = someObject.someMethod();
auto &items = someObject.someMethod();
Run Code Online (Sandbox Code Playgroud)
And*_*owl 14
即使这两种形式在这种情况下是等价的,我仍然会选择第一种形式,因为它更好地传达了这样一个事实:你的代码片段不需要修改返回的对象的状态someMethod().
所以我的建议就是这样做:
const auto &items = someObject.someMethod();
Run Code Online (Sandbox Code Playgroud)
在你的情况下,没有区别.该类型auto表示将被推断为const A在两种情况下,这样的类型items将是const A&.
代码的"自我记录的语义"有所不同.在const auto &明确指出"我想回到什么样的参考,我不会改变它." 只是auto &简单地说"我想要一个对返回内容的引用".
更明确的通常是更好的,例外是关注点的分离.不应在接口的客户端提及实现细节.
如果接收器不应该关心如何接收对象,那么完美的转发是可行的方法.
auto && items = someObject.someMethod();
Run Code Online (Sandbox Code Playgroud)
允许const推断auto,例如,绑定一个临时值,auto &对我来说是一个主要的代码味道.
auto const & 应该是只读的auto & 应该是读写auto && 应该意味着抓住所有,也许采用价值回报对象