《C++ primer》学习笔记之十九:奇怪的数组引用

来源:互联网 发布:博客源码资源站 编辑:程序博客网 时间:2024/06/05 14:48

 数组的引用很奇怪,定义该引用时必须知道数组的大小,比如:
 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]