zoukankan      html  css  js  c++  java
  • 【More Effective C++ 条款1】仔细区别pointers和references

    1)操作符的差别

      指针使用“*”和“->”操作符,而引用使用“.”操作符

    2)初始化的差别

      有空指针,但是没有空引用,和const对象一样,引用一旦定义就必须和对象绑定(当然char* pc=0;char& rc=*pc;也合法但无意义)

    由此造成的影响:

      2.1)对于指针的向下转型,如果失败则返回空指针,但由于没有空引用的说法,所以对于引用的向下转型如果失败则会抛异常

      2.2)由于引用不能为空,所以对于引用的使用不需要测试其有效性,而对于指针的使用往往要测试其是否为空

    3)赋值的差别

      对于指针可以重新赋值,而对于引用,一旦初始化就不能再与其他对象绑定

    4)语法的差别

      指针存的是地址,使用时需要解引用,而引用则是别名

    5)总结

      “当你需要考虑“不指向任何对象”的可能性时,或是考虑“在不同的时间指向不同的对象”的能力时,你应该采用指针,当你确定“总是会代表某个对象”,而且“一旦代表了改对象就不能够再改变”,那么你应该选用引用”

      “当你知道需要指向某个东西,而绝对不会改变指向其他东西,或是当你实现一个操作符而其语法需求无法由指针完成,你就应该选用引用,任何其他时候,请采用指针”

    6)补充

      尽管引用一直被称作是别名,但其实引用也是占空间的,这个可以通过将一个引用封装在一个类中看出(占4个字节),而直接对引用取地址和取大小得到的是被引用对象的地址和大小

    int x=10;
    class A
    {
        int &r=x;
    };
    
    int main()
    {
        cout<<sizeof(A)<<endl;//4
        A a;
        cout<<sizeof(a)<<endl;//4
    }
  • 相关阅读:
    MySQL-多条件拼接语句
    MongoDB-C#驱动基本操作
    MongoDB-C#驱动帮助
    MongoDB-权限配置
    MongoDB-安装
    C#_实用
    提高C#代码质量-规范
    C#_Express-ickd接口
    Eclipse背景颜色修改
    Java中可变长参数的方法
  • 原文地址:https://www.cnblogs.com/yinbiao/p/11690559.html
Copyright © 2011-2022 走看看