Welcom to RO_wsy's blog

c++指针和引用的区别

c++中,指针和引用开起来不大一样,但他们却实现类似的功能,无论指针还是引用,都使你间接使用其他对象,那么他们有什么区别呢,又在何时使用他们呢?

首先,要记住,引用是不可以为空的,也就是没有NULL REFERENCE,引用必须指向某个对象,所以引用在使用时必须初始化。

指针可以指向为空,例如可以有以下代码:

int *pi = NULL;

有人可能会问,那下面的代码怎么解释呢:

char *pc = NULL;
char& rc = *pc;

这段代码的行为是未定义的,当然也不应该是一个脑子正常的程序员写出来的。

因为引用不可以为NULL,所以使用时可以不用测试其是否为空,效率可能会高些。

另外,引用只能指向一个对象,不可以改变引用所指向的对象;而指针指向的对象则可以改变,例如下面代码:

string s1("cat");
string s2("dog");
string& rs = s1; // rs代表s1
string *ps = &s1; // ps指向s1
rs = s2; // rs仍然代表s1,不过s1为dog
ps = &s2; // ps指向s2

所以,当“总是会代表某个对象”,而且“一旦代表了就不能再改变”,就应该使用引用。

还用一种常见的情况需要使用引用,就是operator[],他需要返回一个可以被赋值的东西,例如:

vector<int> v(10);
v[5] = 10;

如果operator[]返回指针,上面的第二句就要写成 *v[5] = 10,这看起来像vector中装的是指针,所以,根据此原因应该返回引用。

关于何时使用引用,何时使用指针,总结如下:当你需要指向某个东西,而且绝不会改变指向其他的东西,或者实现一个操作符而其语法需求无法有指针实现是,使用引用;除此之外,使用指针。


posted @ 2012-09-10 22:05  RO_wsy  阅读(120)  评论(0编辑  收藏  举报