c++指针和引用的区别

  1. 指针指向了一个对象的地址,引用是给一个对象起别名。

  2. 指针传入一个函数后得先判空,但引用不需要。不存在空绑定,但存在空指针。

  3. 指针可以被重新赋值指向另一个不同对象,但是引用总是指向在初始化时被指定的对象,以后不能改变。

  4. 个人认为一个函数中,如果涉及传入参数的修改,那么最好把这个被修改值设计成指针接口,因为这样在下游调用函数时,就知道哪个参数会被修改,代码可读性更好。如果传入参数不希望被修改,则设计成const引用。例如

    class A {};
    
    // 使用引用作为接口
    void Foo1(const A& a1, A& a2);
    
    // 使用指针作为接口
    void Foo2(const A& a1, A* a2);
    
    // 下游调用
    A a1;
    A a2;
    Foo1(a1, a2); // 不确定哪个参数会被修改
    Foo2(a1, &a2); // 确定a2会被修改
    
  5. 涉及型别推导时,例如模板推导或auto推导的情况,指针会被推导出指针型别,并保留cv特性。但引用只会被推导成值型别,且不保留cv特性。例如

    const double& a = 1.;
    const double* ap = &a;
    
    auto bp = ap; // bp会被推导成const double*
    auto b = a; // b会被推导成double
    
  6. 一些惯用语境下,例如重载[]操作符,重载=操作符,在返回类型时应该使用引用,而不使用指针。这些语境下使用指针返回会令人误解,降低代码可读性。

持续补充…

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值