本文主要是介绍区别pointer和references,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《more effective C++》读书笔记
指针pointer与引用reference
1 没有所谓的null reference。一个reference必须总代表某个对象
char *pc=0; //正确,代表空指针
char & rc=*pc; //语法正确,但使用错误,使用了空引用。
2 引用一定代表某个对象,C++要求引用必须有初值
string & rs; //错误
string s("abcede");
string &rs=s;
指针没有这样的限制
string * ps;
3 指针可以被重新赋值,指向另一个对象;引用却总是指向(代表)它最初获得的那个对象。
string s1("1111111");
string s2("2222222");
string & rs=s1;
string *ps=&s1;
rs=s2; //rs仍代表s1,只是s1的值变成了"222222222"
ps=&s2; //ps指向了s2,而s1的内容并没有变
4 实现某些操作符的时候,operator[]返回一个应用
vector<int > v(10);
v[5]=10;
5 形参的应用与不引用
不引用会产生不必要的拷贝,而且在函数内的修改不会影响外部的实参,
引用会避免拷贝,但内部的修改,会直接影响外部的实参。如果你的确不想修改外部的值,请用const引用,避免不小心修改了。
一般来说函数的参数只要非内部类型:int char等等,都应该用引用,避免不必要的拷贝。
总结:
当你知道你需要指向某个东西,而且绝不会改变指向其他东西,或是当你实现一个操作符而其语法无法由指针达成。
其他时候选用指针。
这篇关于区别pointer和references的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!