关于返回STL容器数据成员而不调用复制构造函数

时间:2015-12-11 16:16:18

标签: c++ c++11 syntax stl

我想返回一个私有数据成员的STL容器而不调用整个容器的复制构造函数。

这就是我所做的:

  A &a;
  ///a is initialized...
  auto dq = a.getdq();

我用

在另一个类中调用它
dq

但是我在调​​试器中看到A的地址与类&的地址不同,plot(c(imf[1,]), ylim=c(-100, 100),type="l", col="blue") 表示它将通过引用传递而不是.modal-dialog{ position:absolute; width: 500px; left: 50%; bottom:0; margin-left: -250px; } 不要复制整个deque?

是否有其他方法可以传递STL容器而不复制它?

2 个答案:

答案 0 :(得分:7)

由于您正在使用auto,因此您最终会得到一个对象(不是引用!)作为dq。要将其作为参考,请将代码修改为

const auto& dq = a.getdq();

auto类型扣除规则可在此处找到: http://en.cppreference.com/w/cpp/language/template_argument_deduction#Other_contexts

答案 1 :(得分:3)

你认为你写的是

decltype(auto) dq = a.getdq();

这表示右侧表达的参考性和常数等。然而

auto dq = a.getdq();

剥离引用和​​consts。另一种做同样事情的方法是

const auto & dq = a.getdq();

这样你就可以添加constness和referenceness了。这是推荐的方法。