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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值