与c++函数中的参数混淆

Be confused with argument in c++ function?

本文关键字:参数 c++ 函数      更新时间:2023-10-16

两个函数的区别是什么?

//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"。谁能把这个错误解释得更清楚些吗?谢谢!

在c++中,某些类型的语法很奇怪,因此经常出现这种混淆。

  • T (&a)[N] 对大小为N的数组T的引用,这是语言允许的,因此编译了第一个代码。

  • T &a[N]一个数组的引用(T)的大小为N,这是语言不允许的,因此它不能编译。

在第二种情况下,操作符优先级意味着索引[]在引用&之前。在第一种情况下,您正在引用一个具有T类型的N对象的数组,而在第二种情况下,您的数组具有N引用T类型的对象,这是无效的。