全网整合营销服务商

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

免费咨询热线: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  # 对象  # 算法  # 的是  # 隐式  # 是一个  # 那是  # 已有  # 是怎么  # 可以用  # 一座  # 错了  # 又不 


相关文章: 专业网站建设制作报价,网页设计制作要考什么证?  如何快速查询网站的真实建站时间?  建站之星上传入口如何快速找到?  小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  Python如何创建带属性的XML节点  深圳网站制作案例,网页的相关名词有哪些?  Android滚轮选择时间控件使用详解  如何快速使用云服务器搭建个人网站?  南宁网站建设制作定制,南宁网站建设可以定制吗?  高防服务器租用指南:配置选择与快速部署攻略  建站之星后台搭建步骤解析:模板选择与产品管理实操指南  如何在云指建站中生成FTP站点?  建站之星如何修改网站生成路径?  天津个人网站制作公司,天津网约车驾驶员从业资格证官网?  c# Task.ConfigureAwait(true) 在什么场景下是必须的  测试制作网站有哪些,测试性取向的权威测试或者网站?  如何用花生壳三步快速搭建专属网站?  建站VPS能否同时实现高效与安全翻墙?  无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?  如何挑选高效建站主机与优质域名?  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  香港服务器WordPress建站指南:SEO优化与高效部署策略  如何选择香港主机高效搭建外贸独立站?  官网建站费用明细查询_企业建站套餐价格及收费标准指南  高防服务器租用首荐平台,企业级优惠套餐快速部署  重庆市网站制作公司,重庆招聘网站哪个好?  大同网页,大同瑞慈医院官网?  如何零成本快速生成个人自助网站?  Thinkphp 中 distinct 的用法解析  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  哈尔滨网站建设策划,哈尔滨电工证查询网站?  如何零基础在云服务器搭建WordPress站点?  如何配置FTP站点权限与安全设置?  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  如何在搬瓦工VPS快速搭建网站?  如何选择高效便捷的WAP商城建站系统?  图册素材网站设计制作软件,图册的导出方式有几种?  如何设置并定期更换建站之星安全管理员密码?  公司网站的制作公司,企业网站制作基本流程有哪些?  制作销售网站教学视频,销售网站有哪些?  如何选择高效稳定的ISP建站解决方案?  如何通过免费商城建站系统源码自定义网站主题与功能?  如何在Windows服务器上快速搭建网站?  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  广州美橙建站如何快速搭建多端合一网站?  网站制作免费,什么网站能看正片电影? 

您的项目需求

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