有了指针,为什么还需要引用?指针和引用有什么差别?
指针与引用看上去完全不同(指针用操作符“*”和“->”,引用使用操作符“. ”),但是它们有着相同的功能
指针和引用有着什么差别?
第一点
不管在什么情况下,都不能使用空引用
但是,指针可以为空
char &ab; //error,引用不能为空
char *ptr = NULL; //指针可以为空
//如果你想通过以下代码让引用为空,这就像拿石头打自己
char *pc = 0; // 设置指针为空值
char& rc = *pc; // 让引用指向空的指针
第二点
引用在初始化后就不能修改
指针可以指向其他地址
char a = '#';
char b = '*';
char *p = &a; //指针指向a
p = &b; //指针指向b
char &r = a; //引用a
r = b; //把a设为b,而不是变成引用b
既然指针那么强大,为什么我们还需要引用?
第一点
指针的效率比较好因为
指针需要检查是否为空
引用不需要检查(因为引用不能为空)
//检查指针是否为空
int foo(int * p)
{
if (p == NULL)
return 0;
}
第二点
引用能够更好的支持操作符重载operator overloading
如果用指针来operator overloading操作
const int operator +(const int *a, const int *b);
//那么使用的时候
int a = &b + &c; //这样看起来是不是很辛苦
//如果使用引用
const int operator +(const int &a, const int &b);
int a = b + c; //是不是更好呢
更多讨论在 点我进入