2个功能有什么区别?
//a
template <typename T, int N>
int g( T (&a)[ N ] )
{
return N;
}
//b
template <typename T, int N>
int g( T &a[ N ] )
{
return N;
}
可以编译代码// a,但对于// b我收到错误:“declaration of 'a' as array of references
”。
任何人都可以更清楚地向我解释这个错误吗?
谢谢!
答案 0 :(得分:5)
在C ++中,某些类型的语法很奇怪,因为经常出现这种混淆。
T (&a)[N]
是一个大小为N
的T数组的引用,这是语言允许的,因此第一个代码会编译。
T &a[N]
是一个大小为T
的引用(N
)的数组,该语言不允许这样做,因此它不会&# 39; t compile。
答案 1 :(得分:2)
在第二种情况下,operator precedence表示索引[]
位于引用&
之前。在第一种情况下,您正在引用具有N
类型T
对象的数组,而在第二种情况下,您有一个数组N
引用类型为{的对象{1}},这是无效的。