More Effective C++ : Item 1: 指针和引用的区别

来源:互联网 发布:java sql学生管理系统 编辑:程序博客网 时间:2024/06/14 09:04

区别1:引用必须代表某个对象,即没有null reference;指针可以指向NULL,即有null pointer。

// 禁止以下行为char *pc = NULL;char &rc = *pc;// 让引用代表NULL指针的解引值。
string str("Wuhan");string &rs1;// 错误string &rs2 = str;// OK

效率问题:

void printDouble(const double &rd){cout<<rd<<endl;}void printDouble(const double *pd){if (pd != NULL){cout<<*pd<<endl;}}

 

区别2:指针可以被重新赋值,指向另外一个对象;引用却总是指向最初指向的那个对象。

#include <iostream>#include <string>using namespace std;int main(){string s1("Beijing");string s2("Wuhan");string &rs = s1;string *ps = &s1;rs = s2;// rs仍然代表s1,但是s1的值变成了s2的内容。ps = &s2;cout<<rs<<endl;// Wuhancout<<s1<<endl;// Wuhansystem("pause");return 0;}


特殊情况:指针无法解决,必须使用引用解决。

/*operator[]的返回值类型问题*/vector<int> v(10);// operator[]必须返回某种“能被当做assignment赋值对象”的东西v[5] = 10;// 如果operator[]返回pointer,上面的句子必须写成*v[5] = 10;// 总结operator[]应该返回一个reference

 

原创粉丝点击