std::ref

std::ref

  • 作用:将一个类型为对象或函数的实参包装为一个可以隐式转化或显式获取引用的类。在std::thread构造函数中,虽然参数类型为右值引用类型,但只是为了将那些只能进行移动的类型捕获,而实际上构造函数将无视实例化类型,仅拷贝提供的变量。使用引用包装器,将使得那些需要对实参进行引用的形参(T&)得到正确初始化,从而在新线程函数中能够对共享内容进行读取、修改。

  • 原码:

    //仅接受左值
    template<class _Ty>
    	_NODISCARD inline reference_wrapper<_Ty> ref(_Ty& _Val) noexcept
    	{
         	// create reference_wrapper<_Ty> object
    	return (reference_wrapper<_Ty>(_Val));
    	}
    
    /*	reference_wrapper<_Ty>使用要求——
        "reference_wrapper<T> requires T to be an object type or a function type."
    */
    
    /*reference_wrapper<_Ty>构造函数,用于存储内建地址
     *为什么不直接用&Ref存储地址呢,因为若_Uty重载了&运算符,将发生一些意料之外的事情 
     */
    	@parm: _Uty&& _Val
    	@expression : _Ty& _Ref = _STD forward<_Uty>(_Val);
    				  _Ptr = _STD addressof(_Ref);
    
    //reference_wrapper<_Ty>两个重要函数,用于隐式类型转换或显式获取引用
    	operator _Ty&() const noexcept
    		{
         	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值