【More Effective C++】Item 1
Item 1:仔细区别pointer和reference
对于很多C++初学者来说,pointer和reference的区别,以及什么情况下该使用reference,什么情况下要使用pointer,都是一个很容易混淆的问题。
对于这个问题,大家只要明白一点,就能很容易把握这个度:没有所谓的Null reference,一个reference必须总代表一个对象。
因此,给出以下明确的建议:
1、当定义的变量需要改变以指向其他对象,或者它可以不指向任何对象时,应该使用pointer;
2、如果这个变量总要指向一个对象,那么它应该定义为reference;
3、在某些operator重载中,返回值用pointer无法达到语法需求时,也应该使用reference,如operator[],如果其返回值是pointer,那么当返回值变量作为赋值运算符“=”等的left value时,它会被写成*rvalue[2]=xx;这样看上去好像是指针数组,而实际上它不是。
了解到上面的内容之后,我们还应该注意以下几点:
1、不能定义空指针的引用,即char* p=0; char& rc=*p;这是一个有害的行为,其结果连编译器都无法预知;
2、reference的效率比pointer的效率要高一些,因为reference不需要进行有效性检查;
3、pointer和reference还有另外一个区别:pointer可以被重新赋值,但是reference却总是指向它最开始初始化的那个对象。