区别pointer和references

来源:互联网 发布:算法设计与分析pdf下载 编辑:程序博客网 时间:2024/06/05 03:31

《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等等,都应该用引用,避免不必要的拷贝。


总结:

      当你知道你需要指向某个东西,而且绝不会改变指向其他东西,或是当你实现一个操作符而其语法无法由指针达成。

      其他时候选用指针。

  




0 0
原创粉丝点击