【发布时间】:2020-01-09 04:41:54
【问题描述】:
有什么区别
template <class T,class ARG_T=T&>
和
template <class T,class ARG_T=T>
【问题讨论】:
-
这让我对默认的参数处理感到困惑。看我的问题stackoverflow.com/questions/57820195/…
有什么区别
template <class T,class ARG_T=T&>
和
template <class T,class ARG_T=T>
【问题讨论】:
这是一种消除在基于该模板的函数中获取不必要值副本的好方法,但以可选方式& 表示 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)。
这意味着不会获取v1 和v2 的值副本。当然,获取引用并不总是更有效,因此对于某些实例化,您可能希望 ARG_T 与 T 相同。
【讨论】:
int&,我会得到和你一样的结果。我不知道为什么。我在这里问过这个问题; stackoverflow.com/questions/57820195/…
模板类型参数是(依赖的)类型名称。类型名称后的 & 符号使其成为左值引用。如果T 已经是引用,则引用折叠规则适用。
【讨论】: