当我这样做的时候:

std::vector<int> hello;

一切都很好。然而,当我把它变成一个引用向量时:

std::vector<int &> hello;

我就会犯可怕的错误

指向引用的指针是非法的

我想把一堆对struct的引用放到一个vector中,这样我就不用管指针了。为什么矢量会为此大发脾气?我唯一的选择是使用指针的向量代替?


当前回答

是的,你可以,寻找std::reference_wrapper,它模仿引用,但是可赋值的,也可以“重新定位”

其他回答

正如其他人所提到的,您可能最终会使用指针向量。

但是,您可能想要考虑使用ptr_vector代替!

根据它们的本质,引用只能在创建时设置;也就是说,下面两行有非常不同的效果:

int & A = B;   // makes A an alias for B
A = C;         // assigns value of C to B.

此外,这是非法的:

int & D;       // must be set to a int variable.

然而,当你创建一个向量时,没有办法在创建时给它的项赋值。实际上你只是做了一大堆上一个例子。

我在c++ 14中找到了原因,“国际标准ISO/IEC 14882:2014(E)编程语言c++”

(8.3.2-5.s1) 没有引用的引用,没有引用的数组,也没有引用的指针。

是的,你可以,寻找std::reference_wrapper,它模仿引用,但是可赋值的,也可以“重新定位”

没有技术上的原因为什么你不能有一个引用向量,它只是不是API的一部分,大概是为了保持它类似于数组。可以很容易地添加专门化,使用引用,在内部将它们存储为指针,并在API中显示为引用:

vector<int&> ivref;
int i = 42;
ivref.push_back(i); // address of i is stored
ivref.front() = 43; // i is set to 43
ivref.push_back(44); // Marked deleted for rvalue references 
ivref.resize(10);    // Marked deleted for vector of references