引用&必须初始化且不能重新分配,所以列表元素(如vector中元素)不能是引用。代替引用,我们可以使用指针,但这将打开存储或传递空指针的可能性,为了解决这个问题,有std :: reference_wrapper。
引用,其一变,都变。
当您希望将对象从std::reference包装器中取出时,可以使用get()成员函数。
#include <functional> // std::reference_wrapper
#include <iostream>
#include <vector>
#include <string>
int main()
{
std::string tom{ "Tom" };
std::vector<std::reference_wrapper<std::string>> names{}; //std::vector<ste::string&> names{} 错误
names.push_back(tom);
names[0].get() += " Beam"; //vector中第一个元素内容变为Tom Beam
std::cout << tom << '
'; //tom也变为Tom Beam
return 0;
}