C++11 std::make#u shared和std::forward— ;什么';重点是什么?
我试图理解为什么std::make_shared是这样声明/实现的:C++11 std::make#u shared和std::forward— ;什么';重点是什么?,c++11,move-semantics,make-shared,C++11,Move Semantics,Make Shared,我试图理解为什么std::make_shared是这样声明/实现的: template<class _Tp, class ..._Args> inline _LIBCPP_INLINE_VISIBILITY typename enable_if < !is_array<_Tp>::value, shared_ptr<_Tp> >::type make_shared(_Args&& ...__args) { r
template<class _Tp, class ..._Args>
inline _LIBCPP_INLINE_VISIBILITY
typename enable_if
<
!is_array<_Tp>::value,
shared_ptr<_Tp>
>::type
make_shared(_Args&& ...__args)
{
return shared_ptr<_Tp>::make_shared(_VSTD::forward<_Args>(__args)...);
}
模板
内联\u LIBCPP\u内联\u可见性
typename启用\u如果
<
!是数组::值,
共享ptr
>::类型
使共享(_参数&&…_参数)
{
返回共享\u ptr::使共享(\u VSTD::转发(\u参数)…);
}
我好奇的是:
- 为什么
只接受右值引用?为什么对常量(即,make_shared
)的引用没有重载const\u Args&
调用有什么意义\u VSTD::forward
T
,对于l值,推断类型为T&
转发呼叫的意义是什么
将临时对象绑定到r值引用时,该引用(名称)不再是r值。您需要能够还原值的原始值,这就是std::forward
的目的:将r值参数作为r值转发,将l值参数作为l值转发
本质上,std::forward
将&
应用于T
或T&
。当&
应用于
它成为T
-r值参考,并且T&&
变为T&
,这又是T&&
T&
T
,对于l值,推断类型为T&
转发呼叫的意义是什么
将临时对象绑定到r值引用时,该引用(名称)不再是r值。您需要能够还原值的原始值,这就是std::forward
的目的:将r值参数作为r值转发,将l值参数作为l值转发
本质上,std::forward
将&
应用于T
或T&
。当&
应用于
它成为T
-r值参考,并且T&&
变为T&
,这又是T&&
T&