C/C++编程:reference wrapper

本文详细介绍了C++标准库中reference_wrapper的作用及其使用场景。通过实例展示了如何利用std::ref和std::cref将引用传递给原本只能接受值传递的函数模板,从而避免了额外的模板特化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

reference wrapper作用

声明于 <functional> 中的 class std::reference_wrapper<> 主要用来“喂 ” reference 给function template, 后者原本以 by value方式接受参数。对于一个给定类型 T ,这个 class 提供 ref () 用以隐式转换为 T& ,一个 cref () 用以隐式转换为 const T& ,这往往允许 function template 得以操作 reference 而不需要另写特化版本。

简单来说,就是让按值传参的模板可以接受一个引用作为参数。

 

例如,声明如下

template <typename T>
void foo (T val);

经由调用

int x;
foo(std::ref(x));

T变成int &,而经由调用

int x;
foo(std::cref(x));

T变成了const int &

 

 

浅析std::ref与reference_wrapper

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值