std :: vector元素中的const引用

doc*_*doc 10 c++ stl const reference vector

它只是我的编译器还是禁止在std :: vector元素中使用cons引用.考虑以下结构:

struct Y
{
  const int & x;

  Y(const int & p_x):
        x(p_x)
  {
  }
};
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试将这样的对象推送到vector时:

std::vector<Y> yv;
int x = 5;
Y y(x);
yv.push_back(y);
Run Code Online (Sandbox Code Playgroud)

我得到编译器错误:"错误:非静态引用成员`const int&Y :: x',不能使用默认赋值运算符".不应该复制ctor就够了吗?

hmj*_*mjd 21

vector元素必须是可分配的.从第23.2.4节C++标准的类模板向量:

......存储的对象应满足Assignable的要求.


ste*_*ert 10

你可能想检查一下

std::reference_wrapper
Run Code Online (Sandbox Code Playgroud)

适用于C++ 11

  • 这是一个有用的答案,但是它将对“ std :: reference_wrapper”的功能以及如何使用它进行一些解释/示例,这将非常有益。 (4认同)

Nic*_*ick 5

不,因为您无法分配给const引用,并且STL容器使用赋值来移动项目.

你最好使用shared_ptr(boost::std::取决于你的环境)或原始指针.