【问题标题】:Passing by reference to a template function通过引用传递给模板函数
【发布时间】:2017-02-15 05:22:13
【问题描述】:

我有一个查找最大值的功能,我想通过引用发送静态数组,为什么这不可能?

template <class T>
T findMax(const T &arr, int size){...}

int main{
  int arr[] = {1,2,3,4,5};
  findMax(arr, 5); // I cannot send it this way, why?
  return 0;
}

【问题讨论】:

  • 请使用int main()(注意int()
  • 仅供解释,我同意 int (我会编辑它,谢谢)。

标签: c++ arrays templates


【解决方案1】:

使用正确的语法。将签名更改为:

template <class T, size_t size>
T findMax(const T (&arr)[size]){...}

或者您可以使用std::array 参数作为findMax() 函数。

Live Example

为什么这不可能?

const T &amp;arr:这里的arrT 类型的引用,而不是您可能认为的T 类型数组的引用。所以你需要[..]arr 之后。但随后它将衰减为指针。 在这里您可以使用() 更改绑定并使用const T (&amp;arr)[SIZE]

更多可以尝试探索const T &amp;arr[N]const T (&amp;arr)[N]的区别。

【讨论】:

  • 你能详细说明你做了什么吗?,这个语法是什么标准?它适用于任何类型的数组吗?
  • 我希望这在编辑后更清楚。希望对你有帮助。
  • T &amp;arr[N] 是引用数组which is illegal,但T (&amp;arr)[N] 是引用T 数组,这是完全有效的。
  • @HiI'mFrogatto 感谢您的链接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2017-08-12
  • 2012-03-19
  • 2018-06-09
相关资源
最近更新 更多