【问题标题】:How does the '&' symbol work in template parameter?'&' 符号在模板参数中是如何工作的?
【发布时间】:2020-01-09 04:41:54
【问题描述】:

有什么区别

template <class T,class ARG_T=T&>    

template <class T,class ARG_T=T>    

【问题讨论】:

标签: c++ templates


【解决方案1】:

这是一种消除在基于该模板的函数中获取不必要值副本的好方法,但以可选方式&amp; 表示 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 相同。

【讨论】:

  • 但是当我将您的代码用作 add(a,b) 时,翻译器(vs2019 社区)只需将其分析为 "int add(int v1, int v2) " 而不是 "int add(int &v1, int &v2)"
  • @mioyuki2009:实际上,如果我不明确包含int&amp;,我会得到和你一样的结果。我不知道为什么。我在这里问过这个问题; stackoverflow.com/questions/57820195/…
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 2016-12-22
    相关资源
    最近更新 更多