[英]How to use auto with const and & in C++?
我有一个返回const A&的方法。
如果我想使用auto,那么正确的方法是什么。 这个可以吗?
const auto &items = someObject.someMethod();
我看到有些人这样做:
auto &items = someObject.someMethod();
我不确定使用哪一个,真的有什么区别......
编辑:
在这种情况下,这两个是等价的吗?
auto items = someObject.someMethod();
auto &items = someObject.someMethod();
即使这两种形式在这种情况下是等价的,我仍然会选择第一种形式,因为它更好地传达了这样一个事实:你的代码片段不需要修改someMethod()
返回的对象的状态。
所以我的建议就是这样做:
const auto &items = someObject.someMethod();
在你的情况下,没有区别。 在两种情况下, auto
表示的类型将推导为const A
,因此items
的类型将为const A&
。
代码的“自我记录的语义”有所不同。 const auto &
明确指出“我想要引用返回的内容,我不会修改它。” 只是auto &
简单地说“我想要一个对返回内容的引用”。
更明确的通常是更好的,例外是关注点的分离。 不应在接口的客户端提及实现细节。
如果接收器不应该关心如何接收对象,那么完美的转发是可行的方法。
auto && items = someObject.someMethod();
允许在auto
中推导const
,例如,将临时值绑定到auto &
这对我来说是一个主要的代码味道。
auto const &
应该是只读的 auto &
应该是读写 auto &&
应该意味着捕获所有,也许采用按值返回的对象
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.