vector不能直接存储引用类型,因引用无默认构造、拷贝赋值且不可重绑定;应使用std::reference_wrapper,需#include,通过std::ref/cref创建,取值用.get()或隐式转换。

vector 不能直接存储引用类型
编译器会直接报错:error: field of type 'int&' is not assignable。因为引用不是对象,没有默认构造函数、拷贝赋值操作符,也不可重新绑定——而 std::vector 内部依赖这些特性做内存重分配、元素移动和扩容。哪怕写成 std::vector,连模板实例化这关都过不去。
用 std::reference_wrapper 替代引用
它是个轻量级包装器,本质是可拷贝、可赋值的“引用代理”,底层仍指向原对象,不复制数据。常用场景包括:往容器里存函数参数绑定后的引用、回调列表中保存外部变量别名、避免指针空解引用风险。
关键点:
- 头文件是
,不是 - 创建方式:用
std::ref(x)或std::cref(x)(后者生成 const 引用包装) - 取值时需显式调用
.get(),或依赖隐式转换(如传给接受int&的函数) - 不能用
std::reference_wrapper存储临时对象的引用(生命周期不匹配)
示例:
std::shared_ptr
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











