C++中const引用和非const引用的使用注意
今天学习时突然有疑惑,C++有了指针为何还要设计引用呢?后来看到一篇博客豁然开朗:为什么 C++ 有指针了还要引用?
总结一下:
- 代码更加简洁好看了
- 由于引用必须被初始化,并且之后也无法重新绑定其他对象,这样就更安全了
- 为了操作符重载,比如博客中那个重载
[ ]
的例子
并且,在了解了这些之后,对引用的一些其他特性也就一目了然了。
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;//不可寻址
非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引用的使用注意相关推荐
- C++类中const函数与非const函数的调用规则
class EX{public:void constFunction() const; }; 如上所示,通过将类成员函数声明为const,以表示这个函数不可以修改类中的成员变量. 建议将不可以修改数据 ...
- 类中const函数及非const函数的调用规则
转自:点击打开链接 类中const函数及非const函数的调用规则 class Student { public:int getAge(){return m_age;}int getAge() con ...
- C++ const对象与非const对象的相互调用、const成员函数与非const成员函数的相互调用
1)const对象可以调用非const成员函数吗? 答:不能.const修饰的对象实则修饰的是该对象的this指针,并且const修饰的成员不能进行修改,如果使用const调用非const成员函数,可 ...
- const引用和非const引用
const引用可以初始化为不同类型的对象或者初始化为右值,同样的初始化对于非const引用却是不合法的. 非const引用只能绑定以与该引用同类型的对象中. const引用则可以绑定到不同但相关的类型 ...
- const形参与非const形参
应该将不修改相应实参的形参定义为const引用,否则将会带来如下问题: 1.不能通过字符串字面值来调用该函数 2.若定义函数如下 1 int A(string &a){} 2 int B(co ...
- const对象不能调用非const成员函数
在C++中,可以用const来定义一个const对象,但const对象不可以调用类中的非const成员函数 原因 引发原因:: 由调用成员函数时隐式传入的当前对象的this指针引起. 非const成员 ...
- const对象只能调用const成员函数、不能调用非const成员函数;非const对象可以调用const成员函数
引发原因: 由调用成员函数时隐式传入的当前对象的this指针引起. 1. 非const成员函数中的隐式参数:classA* this 2. const成员函数中的隐式参数:const classA* ...
- C++11:搞清楚万能引用和右值引用
前言 我们通过一个问题来进入今天的话题: 1.形如 "type&&" 的结构,就是右值引用吗? 2.以下哪些属于右值引用? ① void fun(Widget &a ...
- 临时变量不能作为非const引用
int func(a) {return a; }int main() {int r = func(3 + 5);return 0; } 上述代码报错, 非常量引用的初始值必须为左值 . 主要原因如下 ...
最新文章
- matlab自动加坐标,matlab自动驾驶系统-坐标系
- 对asn.net三层架构的初步认识
- JavaScript编码encode和decode escape和unescape
- CCF真题 201312-2 ISBN号码
- django crm 03
- 沃尔沃汽车:通过基于模型的开发工具实现汽车软件模型结构度量
- WPF MVVM框架 漂亮界面风格的WPF
- Motrix全能下载神器 无限制版 支持下载HTTP、磁力、FTP、BT、百度网盘等
- Detours内联HOOK
- 大数据新闻推送你怎么看_如何看待大数据精准推送,使人的视界越来越窄?
- 计算机上桌面不见了怎么找回,电脑桌面上的文件消失了怎么办,如何找回
- 仿真未编码和进行(7,4)Hamming码的编码的QPSK调制通过AWGN信道后的误比特性能比较
- 当下移动开发唱衰,iOS开发者如何才能涅槃重生?
- day36-MySQL基本SQL语句(下)
- 51单片机 8x8LED点阵屏循环显示数字0~9
- 达芬奇密码 第五十九章
- Windows 小技巧10--Windows常见软件、系统配置
- ajaxSubmit来上传文件
- 有趣的input输入框
- 淘宝直通车提取数据“_h”值 最新生成方案(2020.11.27)
热门文章
- python有哪些作用-python是什么 特点及功能
- 通信专业学python有用吗-通信算法工程师需要学python吗
- 学python的好处-学会python的好处,轻易搭建自己的知乎
- python代码大全表解释-.python3基础之“术语表(1)”
- monty python flying circus-巨蟒剧团之飞翔的马戏团 第1季
- python基础知识填空-Python基础知识(1)
- python语法大全-python语法大全,python语法手册
- 搞定Linux只要半年
- gitbook的使用
- Markdwon中多张图片的并排显示(Mardown的灵动使用技巧)