数组的引用很奇怪,定义该引用时必须知道数组的大小,比如:
int ary; //compile error:数组大小未知
int ary0[0]; //compile error:数组大小未知
int ary2[2]; //ok.
int (&ary0R)[]; //error:对零大小的数组的引用非法。
int (&ary2R)[] = ary2; //error:对零大小的数组的引用非法。
int (&ary2R)[2]; //error:引用必须初始化
int (&ary2R)[2] = ary2; //Ok!
int ary3[3];
int (&ary2R)[2] = ary3; //error:无法从int[3]转化为int (&)[2]
int (&ary2R)[sizeof(ary2) / sizeof(*ary2)] = ary2; //Ok
//下面看引用作为函数的参数时:
void f(int a[]) {} //Ok. a实际上是个指针
f(arg2); //ok. arg2的长度为2,不限制参数的长度
void r(int (&ar)[]) {} //error. 对零大小的数组的引用非法。
void r2(int (&ar)[2]) {} //Ok.
r2(ary2); //Ok. 定义时引用颇多讲究,但使用起来两者可以互换
r2(ary2R); //Ok.
r2(ary3); //error:无法从int[3]转化为int (&)[2]