1.pointer可以为空,但是reference 不能为空。说明一下几个问题:
a. 如果你的变量可能为空,那么你应该将其设计为pointer而不是refrence。反之,如果你的变量不能取空值,那么你应该将其设计为reference。
b. reference既然不能为空,也就必须在定义的时候,它就必须被给予一个合理的值。而指针可以为空。
int a = 10;
int *p; //合法
int& r; //非法
int& r = a; //合法
以下行为要避免:
int *p = null;
int& r = *p;
c.
在reference和pointer都可以使用情况下,使用reference更安全。因为reference不能为空,所以在使用之前不需要判断其值是否为空。
2.pointer所指的对象可以改变,但是reference所指的对象始终不变(通过reference修改的值,最终都会修改reference所引用的那个对象的值)。
如果你所设计的变量在不同时刻需要指向不同的对象,那么需要将其设计为pointer。反之,可以设计为reference因为使用更安全。
- string s1("hello");
- string s2("world");
- string& rString = s1; //rString引用的是s1对象
- string *pString = &s2; //pString指向s2对象
- rString = s2; //此处只是将s1的值修改为world,即将s2的值赋给s1;
- pString = &s1; //此处pString将指向s1对象