有人可以解释这种语法吗? T(& arr)[arrsize] vs T& ARR [arrsize]

时间:2016-06-21 19:47:20

标签: c++ templates parameters casting

这是参考this问题中的第一个形式参数。

  

注意:Tarrsize在此处作为模板参数传递。

T (&arr)[arrsize]似乎是某种演员,但我不确定。 &arr不是类型名称,它只是一个正式的参数名称,旁边有一个引用符号。为什么不放一个T* arr[]?此外,我不认为在实现函数重载的语言中使用正式参数列表或强制进行转换是可能的。 (即,在函数调用中引入歧义)。我认为模板函数引入了有用的歧义,因此在此上下文中允许转换 - 假设两个模板函数没有相同的签名,禁止转换?

实例化此模板时,此参数变为什么类型?它是指针还是静态数组的引用;只需T*;或其他什么?

2 个答案:

答案 0 :(得分:2)

T& arr[arrsize] arr T&的数组(大小为 arraysize )(这是非法的在C ++中

T (&arr)[arrsize] arr 是对T

的数组(大小为 arraysize )的引用

答案 1 :(得分:2)

T (&arr)[arrsize]

在函数参数中使用时,声明一个名为arr的变量,该变量是对类型为T且大小为arrsize的数组的引用。这是一种将数组传递给函数而不是将其衰减为指针的方法。您可以在函数中使用该数组,就像在声明它的范围中一样。

T& arr[arrsize]

是否是每个标准不允许的引用数组。它应该是编译器错误。