全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

c++中的std::reference_wrapper有什么用_c++在容器中存储引用【STL】

std::reference_wrapper的核心作用是使引用具备值语义,从而可存储于容器、传递给函数或参与算法;它通过内部指针实现拷贝/赋值与隐式转引用,解决原生引用不可复制、不可默认构造导致无法用于标准容器的问题。

std::reference_wrapper 的核心作用是:让引用能“假装成值”,从而可以放进容器、作为函数参数传递、参与算法,而不会触发编译错误。

为什么容器不能直接存引用?

C++ 标准容器(如 std::vectorstd::list)要求元素类型必须是可复制(CopyConstructible)和可赋值(CopyAssignable)的。而原生引用(如 int&)不满足这些要求——它不能被重新绑定,也不能默认构造,所以 std::vector 是非法的,编译直接报错。

reference_wrapper 是怎么解决的?

std::reference_wrapper 是一个轻量级包装器,内部保存的是 T*(指针),但对外提供类似引用的语义:

  • 支持隐式转换为 T&(用起来像真引用)
  • 支持拷贝和赋值(拷贝的是“对同一对象的引用”,不是对象本身)
  • 可默认构造(但此时为空,需注意调用前检查)
  • 提供 .get() 显式获取引用,.operator T&() 隐式转换

典型使用场景

在 vector 中存储对已有变量的引用

int a = 10, b = 20, c = 30;
std::vectorerence_wrapper> refs = {a, b, c};
refs[0].get() = 100; // 修改 a
// 此时 a == 100,b 和 c 不变

配合 std::bind 或 lambda 捕获引用

int x = 42;
auto f = std::bind([](int& v) { v *= 2; }, std::ref(x));
f(); // x 变成 84

作为函数参数,避免传值又不想写模板

void process(std::reference_wrapper s) {
    std::cout << s.get().size(); // 访问原始 string
}
std::string str = "hello";
process(str); // 自动转为 std::reference_wrapper

注意点和替代方案

使用 std::reference_wrapper 要小心生命周期:

  • 它不管理所引用对象的生命周期,若原对象已销毁,再访问就是未定义行为
  • 可以用 std::ref(x)std::cref(x) 快速构造,比写 std::reference_wrapper(x) 简洁
  • 如果需要“安全引用”+自动生命周期管理,应考虑 std::shared_ptrstd::weak_ptr,但那是另一层语义
  • 现代 C++ 中,多数情况推荐用指针(T*)或视图(std::span)替代,更直观且无隐式转换风险

基本上就这些——它不是万能引用工具,而是 STL 容器与引用之间的一座窄桥,用对了很顺手,用错了容易踩坑。


# app  # c++  # 编译错误  # 隐式转换  # 为什么  # int  # Lambda  # 指针  # operator  # 对象  # 算法  # 的是  # 隐式  # 是一个  # 那是  # 已有  # 是怎么  # 可以用  # 一座  # 错了  # 又不 


相关文章: 建站之星如何实现五合一智能建站与营销推广?  建站上传速度慢?如何优化加速网站加载效率?  专业商城网站制作公司有哪些,pi商城官网是哪个?  建站VPS配置与SEO优化指南:关键词排名提升策略  如何在万网主机上快速搭建网站?  建站主机是什么?如何选择适合的建站主机?  如何在IIS7上新建站点并设置安全权限?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  建站之星安装步骤有哪些常见问题?  小程序网站制作需要准备什么资料,如何制作小程序?  如何在腾讯云服务器上快速搭建个人网站?  宝塔新建站点报错如何解决?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  如何通过主机屋免费建站教程十分钟搭建网站?  文字头像制作网站推荐软件,醒图能自动配文字吗?  PHP正则匹配日期和时间(时间戳转换)的实例代码  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  高端建站如何打造兼具美学与转化的品牌官网?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  如何选择美橙互联多站合一建站方案?  攀枝花网站建设,攀枝花营业执照网上怎么年审?  网站制作公司排行榜,抖音怎样做个人官方网站  如何用免费手机建站系统零基础打造专业网站?  定制建站价位费用解析与套餐推荐全攻略  ,柠檬视频怎样兑换vip?  网站制作公司,橙子建站是合法的吗?  长沙企业网站制作哪家好,长沙水业集团官方网站?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  高端建站三要素:定制模板、企业官网与响应式设计优化  微信推文制作网站有哪些,怎么做微信推文,急?  济南企业网站制作公司,济南社保单位网上缴费步骤?  广州商城建站系统开发成本与周期如何控制?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  建站之星如何通过成品分离优化网站效率?  如何用狗爹虚拟主机快速搭建网站?  宁波免费建站如何选择可靠模板与平台?  建站10G流量真的够用吗?如何应对访问高峰?  北京建设网站制作公司,北京古代建筑博物馆预约官网?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  制作公司内部网站有哪些,内网如何建网站?  重庆市网站制作公司,重庆招聘网站哪个好?  制作证书网站有哪些,全国城建培训中心证书查询官网?  香港服务器部署网站为何提示未备案?  如何配置WinSCP新建站点的密钥验证步骤?  如何快速搭建高效WAP手机网站?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  网站制作价目表怎么做,珍爱网婚介费用多少? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。