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中装的是指针,所以,根据此原因应该返回引用。
关于何时使用引用,何时使用指针,总结如下:当你需要指向某个东西,而且绝不会改变指向其他的东西,或者实现一个操作符而其语法需求无法有指针实现是,使用引用;除此之外,使用指针。