通过引用传递给模板函数

时间:2017-02-15 05:22:14

标签: c++ arrays templates

我有找到max的功能,我想通过引用发送静态数组,为什么不可能?

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;
}

1 个答案:

答案 0 :(得分:7)

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

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

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

Live Example

  

为什么这不可能?

const T &arr:此处arrT类型的引用,而不是您可能认为的类型T数组的引用。因此,在[..]之后您需要arr。但是它会腐烂到一个指针。 您可以在此处使用()更改绑定,并使用const T (&arr)[SIZE]

更多信息,您可以尝试探索const T &arr[N] v / s const T (&arr)[N]之间的区别。