模板参数中的“&”符号如何工作?

时间:2019-09-06 09:53:21

标签: c++ templates

有什么区别
return $this->belongsToMany('App\SubCategory');

template <class T,class ARG_T=T&>    

2 个答案:

答案 0 :(得分:3)

这是消除基于该模板的函数中不必要的值副本的一种好方法,但可以选择使用&表示 reference 类型。

例如你可以有功能

template <class T, class ARG_T = T&>
T add(std::type_identity_t<ARG_T> v1, std::type_identity_t<ARG_T> v2){
    return v1 + v2;
}

使用type_identity可以防止对T类型的不必要推断(请参阅Template default argument loses its reference type)。

这意味着不会获取v1v2的值副本。当然,获取引用并不总是更有效,因此对于某些实例化,您可能希望ARG_TT相同。

答案 1 :(得分:0)

模板类型参数是(相关的)类型名称。类型名称后面的&符号使其成为左值引用。如果T已被引用,则引用折叠规则适用。