std :: vector元素中的const引用

问题描述 投票:9回答:6

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

struct Y
{
  const int & x;

  Y(const int & p_x):
        x(p_x)
  {
  }
};

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

std::vector<Y> yv;
int x = 5;
Y y(x);
yv.push_back(y);

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

c++ stl reference vector const
6个回答
21
投票

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

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


10
投票

你可能想检查一下

std::reference_wrapper

适用于C ++ 11


5
投票

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

你最好使用shared_ptrboost::std::,具体取决于你的环境)或原始指针。


1
投票

赋值运算符是必要的,因为vector默认提前在额外的槽中构造元素。

稍后,它不使用重新分配,而是使用赋值运算符将这些默认实例分配给您向量中推送的任何内容。


0
投票

通常禁止在任何容器中使用引用。您可以通过以下事实来证明这一点:例如,向量分配正手中的数据,而引用只能分配一次(在初始化期间)。


0
投票

我终于用过了

 std::vector< const Type* >

不是最好看的,但它做同样的工作。

© www.soinside.com 2019 - 2024. All rights reserved.