函数形参为什么使用const引用(常引用)
来源:互联网 发布:进出货软件 编辑:程序博客网 时间:2024/05/22 01:46
&是为了引用传递,防止值传递的复制数据,const是为了保护数据不被改动。
const&防止传值时拷贝构造函数的调用开销
2、形参的对象为顶层const时,传入的实参既可以是const值,又可以是非const值,若是底层const,传入的实参只能是const的值。
顶层 const表示的是指针本身是一个常量, 底层const表示的是指针所指的对象是一个常量。
const int a;//顶层const
const int *a;//底层const
int * const a;//顶层const
const int &a;//底层const
更一般情况下,顶层const可以表示任意对象是一个常量,这对于算术类型、类、指针等任何数据类型都是成立的,
底层 const则与指针和引用等复合类型的基本类型部分有关,
比较特殊的是,指针既可以是顶层 const也可以是底层const,这一点与其他类型区别明显。
2. 顶层 const与底层const在执行拷贝操作时的不同
对于顶层 const与底层const ,在执行对象拷贝时有着明显的不同:
(1)顶层const不受什么影响
int i = 0;
const int ci = 42; // 不能改变 ci 的值,这是一个顶层const
i = ci; // 正确:ci 是一个顶层const,对此操作无影响
const int *p2 = &ci; // 允许改变 p2 的值,这是一个底层const
const int *const p3 = p2; // 靠右的 const 是顶层const,靠左的是底层const
p2 = p3; // 正确:p2 和p3指向的对象的类型相同,p3顶层const的部分不影响
(2)底层cons的限制不能忽略
要求拷出和拷入的对象有相同的底层 const资格或者能转换为相同的数据类型,一般非常量能够向常量转换,反之则不行
int *p = p3; // 错误:p3 包括底层const定义,而p没有
p2 = p3; // 正确:p2 和p3都是底层const
p2 = &i; // 正确:int* 能转换成const int*
int &r = ci; // 错误:普通的 int& 不能绑定到int常量上
const int &r2 = i; // 正确:const int& 可以绑定到一个普通int上
- 函数形参为什么使用const引用(常引用)
- 函数形参为什么要const+引用
- const用法之常对象,常成员函数,常引用
- 函数形参const 引用
- const常引用
- 常引用,const引用的案例,以及常引用作函数参数
- 常引用,const CString&,引用的效率
- const引用(常引用)有感
- 一、C++ 引用、常引用、const
- C++(常)引用,const,指针引用
- 常引用(const reference)
- 函数形参中的const引用
- 函数形参中的const引用
- C++——复制构造函数的形参为什么要是const引用
- const引用形参
- const引用形参
- C++中const:常引用,常对象,常对象成员
- const 与函数引用
- 浅谈MVC、MVP、MVVM的区别
- JS计算当前日期+6个月后的日期
- C++中.和->的区别
- Jenkins和Hudson的恩怨
- android UiAutomator自己写了一个简单测试框架
- 函数形参为什么使用const引用(常引用)
- scala集合排序
- javaweb配置jsp路径映射
- 函数指针和指针函数的区别
- React 还是 Vue: 你应该选择哪一个Web前端框架?
- 详细介绍虚拟机上单节点安装Hadopp
- hpuoj 【1139】比较字符【水题】
- 贪婪算法与调度问题
- HDU-1213-How Many Tables(并查集模板题)