Const 重载解析
1. Const重载应用场景
首先,对于函数值传递的情况,因为参数传递是通过复制实参创建一个临时变量传递进函数的,函数内只能改变临时变量,但无法改变实参。则这个时候无论加不加const对实参不会产生任何影响。但是在引用或指针传递函数调用中,因为传进去的是一个引用或指针,这样函数内部可以改变引用或指针所指向的变量,这时const 才是实实在在地保护了实参所指向的变量。因为在编译阶段编译器对调用函数的选择是根据实参进行的,所以,只有引用传递和指针传递可以用是否加const来重载。
例如:
1 int main() 2 { 3 const int b =5; 4 int c = 3; 5 A a; 6 a.foo(&b); 7 a.foo(&c); 8 return 1; 9 } 10 11 int main() 12 { 13 const int b =5; 14 int c = 3; 15 A a; 16 a.foo(&b); 17 a.foo(&c); 18 return 1; 19 }
2. Const成员函数的重载
const 成员函数重载的解析和const参数重载解析的原理可以说是一样的。之所以这样说是因为const成员函数的解析可被看做是对函数this参数用const来修饰的过程
例如:
class A{
public: A(); int foo(int *test); //可看做:int foo(A *this,int *test); int foo(int *test) const;//可看做:int foo(const A *this,int *test);
}; int main()
{ int b = 5; const A a; a.foo(&b); return 1;
}
3. 总结
(1) const重载主要是通过能否对传入的参数进行修改为判断的。
(2) const参数重载和const函数重载机制都是一样的,因为对于const 函数重载可看做是对隐含的指针this的参数重载。对于非成员函数,因为没有this指针,不能根据const重载。
(3) 重载是在编译阶段已经完成,对于汇编和链接来说透明的。
(4) 构造函数可以重载,但是不可以声明成const函数(需要初始化成员变量); 析构函数不传入参数也不返回值,因此不能重载。
转载于:https://www.cnblogs.com/DF11G/p/4031238.html
Const 重载解析相关推荐
- C++函数重载解析细节
Copyright(C)<C++从入门到精通-经典完整版> 函数重载解析细节 函数重载解析过程有三个步骤这些步骤可以总结如下: 1 确定为该调用而考虑的候选函数以及函数调用中的实参表属性 ...
- 《Java 核心技术卷1 第10版》学习笔记------ -理解方法调用【重载解析、静态绑定、动态绑定】
弄清楚如何在对象上应用方法调用非常重要.下面假设要调用 x.f(args,) 隐式参数 x 声明为类 C 的一个对象.下面是调用过程的详细描述: 1 ) 编译器査看对象的声明类型和方法名.假设调用 x ...
- Const 深度解析
面向对象是C++的重要特性. 但是c++在c的基础上新增加的几点优化也是很耀眼的 就const直接可以取代c中的#define 以下几点很重要,学不好后果也也很严重 const 1. 限定符声明变量只 ...
- C++ Const深入解析
"深入解析"这一词只是为了吸引大家的眼球,这里我主要说说自己的理解.既然是深入解析,那也要有一定的见解才好,不然贻笑大方. Const顾名思义,就是常量,常量是什么,那就是不能轻易 ...
- Javascript基础之-var,let和const深入解析(二) - 三者的规范描述、临时死区 (TDZ)、双定义
文章目录 # var 规范 - 描述 # let 和 const 规范 - 描述 # 临时死区 (TDZ) # 双定义 # 总结 你想在在变量声明之前就使用变量?以后再也别这样做了. 新的声明方式(l ...
- 函数的重载与重载解析
文章目录 前言 函数的重载是C++不同于C语言的一个地方,他使得我们可以使用相同的函数名定义不同的函数. 一.注意事项 二.底层原理 三.名称查找 1.限定查找 2.非限定查找 前言 函数的重载是C+ ...
- 类与接口(四)方法重载解析
###一.方法重载简介 方法重载: 当两个(或多个)方法的名称相同,而参数的对应类型或个数不同时,我们就说方法重载了.当然,编译器也能识别出来. 编译器是如何识别调用了哪个方法? 在往下讲前,我们先来 ...
- java 动态重载_Java中是否可以实现动态重载解析?
所以我有一类这样的重载方法: class Foo { public void test(Object value) { ... } public void test(String value) { . ...
- C语言中const用法解析
const修饰的变量存储位置,和不用const修饰的没区别!!!!!! 转自:http://blog.csdn.net/xingjiarong/article/details/47282255 关键字 ...
最新文章
- 美国年薪最高的高管是谁?彭博最新薪酬排名出炉,库克只排第二
- Python游戏开发pygame模块,Python实现球球碰撞小游戏
- 【PAT乙级】1083 是否存在相等的差 (20 分)
- 日期控件的点击事件,在js中添加callback属性,不在html中直接添加
- 中英数字混合的字符串截取
- java 转jsp_【转】JSP三种页面跳转方式
- 【软件周刊】D语言卷土重来,Vue.js 应获 1024 个赞,小薇可以一键启动了
- 修改同一张表的同一个字段的两个不同的值。
- win10无法安装.net framework 3.5 解决方案/无法安装NetFx3解决方案
- label怎么换行 vb_vb代码里如何换行啊?
- (转)DX11代表作!20款主流显卡决战[DiRT2]
- 游戏多开的原理与方法
- 311、FirebaseAnalytics和Google Analytics总结
- js中this是什么?this的5种用法
- Android 13中的 Open Mobile API
- 爱宝 A-80P 打印机驱动
- 301、404、200、304、500等HTTP状态,代表什么意思?
- android关闭背光
- 附件统一处理starter,含附件客户端和附件服务端
- 公司招个程序员,34岁以上两年一跳的不要,开出工资以为看错了
热门文章
- 条形码?二维码?生成、解析都在这里!
- 2022-2028年中国机制砂石行业投资分析及前景预测报告
- python2 安装faiss-gpu 报错 faiss/faiss/python/swigfaiss.i:241: Error: Unable to find ‘faiss/impl/platfo
- Go 学习笔记(63)— Go 中的 for ... range 对切片和数组的差异
- Pytorch使用tensorboardX可视化。超详细
- 使用汇编语言编写第一个程序
- 新材料,比钢硬一倍,但重量只有钢1/6
- 嵌入式开发在过去20年中是如何演变的
- Linux环境变量说明与配置
- Python : IndentationError: expected an indented block