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 {