如何使用const与const和&在C ++中?

时间:2013-05-29 09:14:56

标签: c++ c++11

我有一个返回const A&。

的方法

如果我想使用auto,那么正确的方法是什么。这样好吗?

const auto &items = someObject.someMethod();

我看到有人这样做:

auto &items = someObject.someMethod();

我不确定使用哪一个,真正有什么不同......

编辑:

在这种情况下,这两个是等价的吗?

auto items = someObject.someMethod();
auto &items = someObject.someMethod();

3 个答案:

答案 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 &&应该意味着抓住所有人,或许采用价值回归对象