MoreEffectiveC++_基础议题_条款一仔细区别pointers和references

基础议题部分说的是:pointer(指针)、reference(引用)、casts(类型转换)、array(数组)、constructor(构造函数)。

条款1:仔细区别pointers 和references

Pointer 和reference 都做类似的事情,都需要间接参考到其他的对象。那么具体而言,何时何地该使用哪一个?

首先你要明确没有所谓的null reference。 一个reference 必须总是代表某个对象,但是一个pointer是可以设为null的。所以如果你有一个变量,其目的是用来指向另一个对象,但是也有可能它不指向任何对象,那么你应该使用pointer,因为你可以将pointer设为null。换个角度说,如果这个变量总是代表一个对象,也就是说你的涉及并不允许这个变量为null,那么你应该使用reference。

由于reference一定得代表某个对象,C++因此要求reference必须有初值。

String& rs;//错误,reference必须被初始化

String s(“xyzzz”);

String& rs=s;//正确的,rs指向s

但是pointer 就没有这样的限制

String*  ps;//有效的,但是风险高

Pointer 和reference的另外一个重要差异就是pointer可以被重新赋值,指向另外一个对象,reference确总是指向它最初获得的那个对象。

结论:当你知道你需要指向某个东西,而且绝不会改变指向其他东西,或是当你实现一个操作符而其语法需求无法由pointer达成,你就应该选择reference。任何其他时候请采用pointer。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值