今天学习时突然有疑惑,C++有了指针为何还要设计引用呢?后来看到一篇博客豁然开朗:为什么 C++ 有指针了还要引用?

总结一下:

  1. 代码更加简洁好看了
  2. 由于引用必须被初始化,并且之后也无法重新绑定其他对象,这样就更安全了
  3. 为了操作符重载,比如博客中那个重载[ ]的例子

并且,在了解了这些之后,对引用的一些其他特性也就一目了然了。

  1. const 引用只可读不可写,可以绑定不同类型const/非const对象,或者不可寻址的值,如字面值常量。const引用只是表明,保证不会通过此引用改变被引用的对象,但是还可以通过其他方式来改变。

    注:不允许非const引用指向需要临时对象的对象或值,即,编译器产生临时变量的时候引用必须为const

    例子:

    double a= 3.14;
    //下3行仅对const引用才是合法的
    const int &b= 1024;
    const int &c= a;
    const double &d= a+ 1.0;//不可寻址
    
  2. 非const引用可读也可写,必须绑定相同类型非const对象。不允许非const引用指向需要产生临时对象的对象或值,即,编译器产生临时变量的时候引用必须为const

    例1:

    int a=3;
    int &p=a;//正确
    

    例2:

    double a=3.14;
    int &p=a;//错误
    

    实际运行:

    int tmp=a;//生成临时变量
    int &p=tmp;
    

    这样结果是p指向tmp,这样a就不会随着p的修改而变化,故出错。

参考链接:
https://www.cnblogs.com/chio/archive/2007/07/18/822362.html
https://blog.csdn.net/a3192048/article/details/84621775

C++中const引用和非const引用的使用注意相关推荐

  1. C++类中const函数与非const函数的调用规则

    class EX{public:void constFunction() const; }; 如上所示,通过将类成员函数声明为const,以表示这个函数不可以修改类中的成员变量. 建议将不可以修改数据 ...

  2. 类中const函数及非const函数的调用规则

    转自:点击打开链接 类中const函数及非const函数的调用规则 class Student { public:int getAge(){return m_age;}int getAge() con ...

  3. C++ const对象与非const对象的相互调用、const成员函数与非const成员函数的相互调用

    1)const对象可以调用非const成员函数吗? 答:不能.const修饰的对象实则修饰的是该对象的this指针,并且const修饰的成员不能进行修改,如果使用const调用非const成员函数,可 ...

  4. const引用和非const引用

    const引用可以初始化为不同类型的对象或者初始化为右值,同样的初始化对于非const引用却是不合法的. 非const引用只能绑定以与该引用同类型的对象中. const引用则可以绑定到不同但相关的类型 ...

  5. const形参与非const形参

    应该将不修改相应实参的形参定义为const引用,否则将会带来如下问题: 1.不能通过字符串字面值来调用该函数 2.若定义函数如下 1 int A(string &a){} 2 int B(co ...

  6. const对象不能调用非const成员函数

    在C++中,可以用const来定义一个const对象,但const对象不可以调用类中的非const成员函数 原因 引发原因:: 由调用成员函数时隐式传入的当前对象的this指针引起. 非const成员 ...

  7. const对象只能调用const成员函数、不能调用非const成员函数;非const对象可以调用const成员函数

    引发原因: 由调用成员函数时隐式传入的当前对象的this指针引起. 1. 非const成员函数中的隐式参数:classA* this 2. const成员函数中的隐式参数:const classA* ...

  8. C++11:搞清楚万能引用和右值引用

    前言 我们通过一个问题来进入今天的话题: 1.形如 "type&&" 的结构,就是右值引用吗? 2.以下哪些属于右值引用? ① void fun(Widget &a ...

  9. 临时变量不能作为非const引用

    int func(a) {return a; }int main() {int r = func(3 + 5);return 0; } 上述代码报错, 非常量引用的初始值必须为左值 .  主要原因如下 ...

最新文章

  1. matlab自动加坐标,matlab自动驾驶系统-坐标系
  2. 对asn.net三层架构的初步认识
  3. JavaScript编码encode和decode escape和unescape
  4. CCF真题 201312-2 ISBN号码
  5. django crm 03
  6. 沃尔沃汽车:通过基于模型的开发工具实现汽车软件模型结构度量
  7. WPF MVVM框架 漂亮界面风格的WPF
  8. Motrix全能下载神器 无限制版 支持下载HTTP、磁力、FTP、BT、百度网盘等
  9. Detours内联HOOK
  10. 大数据新闻推送你怎么看_如何看待大数据精准推送,使人的视界越来越窄?
  11. 计算机上桌面不见了怎么找回,电脑桌面上的文件消失了怎么办,如何找回
  12. 仿真未编码和进行(7,4)Hamming码的编码的QPSK调制通过AWGN信道后的误比特性能比较
  13. 当下移动开发唱衰,iOS开发者如何才能涅槃重生?
  14. day36-MySQL基本SQL语句(下)
  15. 51单片机 8x8LED点阵屏循环显示数字0~9
  16. 达芬奇密码 第五十九章
  17. Windows 小技巧10--Windows常见软件、系统配置
  18. ajaxSubmit来上传文件
  19. 有趣的input输入框
  20. 淘宝直通车提取数据“_h”值 最新生成方案(2020.11.27)

热门文章

  1. python有哪些作用-python是什么 特点及功能
  2. 通信专业学python有用吗-通信算法工程师需要学python吗
  3. 学python的好处-学会python的好处,轻易搭建自己的知乎
  4. python代码大全表解释-.python3基础之“术语表(1)”
  5. monty python flying circus-巨蟒剧团之飞翔的马戏团 第1季
  6. python基础知识填空-Python基础知识(1)
  7. python语法大全-python语法大全,python语法手册
  8. 搞定Linux只要半年
  9. gitbook的使用
  10. Markdwon中多张图片的并排显示(Mardown的灵动使用技巧)