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

shi*_*zou 2 c++ syntax stl c++11

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

这就是我做的:

#include "point.h"
#include <deque>

class A {
    std::deque<Point> a;
public:
    const std::deque<Point>& getdq() const { return a; }
};
Run Code Online (Sandbox Code Playgroud)

我把它称为另一个班级

  A &a;
  ///a is initialized...
  auto dq = a.getdq();
Run Code Online (Sandbox Code Playgroud)

但是我在调​​试器中看到它的dq地址与类中的地址不同A,是不是&意味着它将通过引用传递而不是复制整个双端队列?

是否有另一种方法来传递STL容器而不复制它?

Ser*_*eyA 7

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

const auto& dq = a.getdq();
Run Code Online (Sandbox Code Playgroud)

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