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 重载解析相关推荐

  1. C++函数重载解析细节

    Copyright(C)<C++从入门到精通-经典完整版> 函数重载解析细节 函数重载解析过程有三个步骤这些步骤可以总结如下: 1 确定为该调用而考虑的候选函数以及函数调用中的实参表属性 ...

  2. 《Java 核心技术卷1 第10版》学习笔记------ -理解方法调用【重载解析、静态绑定、动态绑定】

    弄清楚如何在对象上应用方法调用非常重要.下面假设要调用 x.f(args,) 隐式参数 x 声明为类 C 的一个对象.下面是调用过程的详细描述: 1 ) 编译器査看对象的声明类型和方法名.假设调用 x ...

  3. Const 深度解析

    面向对象是C++的重要特性. 但是c++在c的基础上新增加的几点优化也是很耀眼的 就const直接可以取代c中的#define 以下几点很重要,学不好后果也也很严重 const 1. 限定符声明变量只 ...

  4. C++ Const深入解析

    "深入解析"这一词只是为了吸引大家的眼球,这里我主要说说自己的理解.既然是深入解析,那也要有一定的见解才好,不然贻笑大方. Const顾名思义,就是常量,常量是什么,那就是不能轻易 ...

  5. Javascript基础之-var,let和const深入解析(二) - 三者的规范描述、临时死区 (TDZ)、双定义

    文章目录 # var 规范 - 描述 # let 和 const 规范 - 描述 # 临时死区 (TDZ) # 双定义 # 总结 你想在在变量声明之前就使用变量?以后再也别这样做了. 新的声明方式(l ...

  6. 函数的重载与重载解析

    文章目录 前言 函数的重载是C++不同于C语言的一个地方,他使得我们可以使用相同的函数名定义不同的函数. 一.注意事项 二.底层原理 三.名称查找 1.限定查找 2.非限定查找 前言 函数的重载是C+ ...

  7. 类与接口(四)方法重载解析

    ###一.方法重载简介 方法重载: 当两个(或多个)方法的名称相同,而参数的对应类型或个数不同时,我们就说方法重载了.当然,编译器也能识别出来. 编译器是如何识别调用了哪个方法? 在往下讲前,我们先来 ...

  8. java 动态重载_Java中是否可以实现动态重载解析?

    所以我有一类这样的重载方法: class Foo { public void test(Object value) { ... } public void test(String value) { . ...

  9. C语言中const用法解析

    const修饰的变量存储位置,和不用const修饰的没区别!!!!!! 转自:http://blog.csdn.net/xingjiarong/article/details/47282255 关键字 ...

最新文章

  1. 美国年薪最高的高管是谁?彭博最新薪酬排名出炉,库克只排第二
  2. Python游戏开发pygame模块,Python实现球球碰撞小游戏
  3. 【PAT乙级】1083 是否存在相等的差 (20 分)
  4. 日期控件的点击事件,在js中添加callback属性,不在html中直接添加
  5. 中英数字混合的字符串截取
  6. java 转jsp_【转】JSP三种页面跳转方式
  7. 【软件周刊】D语言卷土重来,Vue.js 应获 1024 个赞,小薇可以一键启动了
  8. 修改同一张表的同一个字段的两个不同的值。
  9. win10无法安装.net framework 3.5 解决方案/无法安装NetFx3解决方案
  10. label怎么换行 vb_vb代码里如何换行啊?
  11. (转)DX11代表作!20款主流显卡决战[DiRT2]
  12. 游戏多开的原理与方法
  13. 311、FirebaseAnalytics和Google Analytics总结
  14. js中this是什么?this的5种用法
  15. Android 13中的 Open Mobile API
  16. 爱宝 A-80P 打印机驱动
  17. 301、404、200、304、500等HTTP状态,代表什么意思?
  18. android关闭背光
  19. 附件统一处理starter,含附件客户端和附件服务端
  20. 公司招个程序员,34岁以上两年一跳的不要,开出工资以为看错了

热门文章

  1. 条形码?二维码?生成、解析都在这里!
  2. 2022-2028年中国机制砂石行业投资分析及前景预测报告
  3. python2 安装faiss-gpu 报错 faiss/faiss/python/swigfaiss.i:241: Error: Unable to find ‘faiss/impl/platfo
  4. Go 学习笔记(63)— Go 中的 for ... range 对切片和数组的差异
  5. Pytorch使用tensorboardX可视化。超详细
  6. 使用汇编语言编写第一个程序
  7. 新材料,比钢硬一倍,但重量只有钢1/6
  8. 嵌入式开发在过去20年中是如何演变的
  9. Linux环境变量说明与配置
  10. Python : IndentationError: expected an indented block