const形参的函数重载

C++中const的应用(1)之const 形参和实参以及成员函数的 const 和重载 场景写法意义小对象传值不用const,没影响大对象传引用节省拷贝,安全修改指针指向内容可以改指向的内容保护指针指向内容不能改内容固定指针地址不能改指针本身区别解释返回非常量引用,可以赋值修改返回常量引用,只能读,不能改只有写了const版本,才能让const对象正常调用函数!特性说明const 成员函数声明时在函数末尾加const重载 const 和非const常见于operator[]at()const对象 只能调用 const成员函数所以经常要写两版。 阅读详情

转自:http://www.cppblog.com/Marcky/archive/2009/07/12/89796.html

《C++ primer》中提到“仅当形参是引用或指针的时候,形参是否为const才对重载有影响。”

int add(int a, int b);
int add(const int a, const int b);
我想通过定义这两个函数来实现实参是否为const的重载,可事与愿违,这里的第二个函数并没有对第一个进行overloading,而是redefinition。因为,在此的两个函数的形参并不会直接关联到实参,在调用这两个函数的时候,形参都只是实参的一个副本,不管add函数内部对形参做什么处理,都不会影响到实参,也就是说——第二个函数形参中的const没有任何的用处,只是多此一举罢了。所以在此的第二个定义只是对第一个的重定义罢了。
int add(int &a, int &b);
int add(const int &a, const int &b);
这次定义的两个函数与上面不同的地方就是形参使用了引用。这个时候编译器就完全可以根据实参是否为const确定调用哪一个函数了。调用如下:
//非const变量x, y
int x = 1;
int y = 2;

add(x, y); //call add(int &a, int &b)

//const变量x, y
const int x = 1;
const int y = 2;

add(x, y); //call add(const int &a, const int &b)
上述第一种情况:实参为非const对象的时候,其实两个函数都可以被调用,都与之匹配,因为非const对象不但可以初始化非const引用,也可以初始化const引用。但由于非const对象初始化const引用的时候涉及到类型转换,所以此时带非const引用形参的函数为最佳匹配。
上述第二种情况:实参为const对象的时候,就不能将此对象传递给带非const引用的形参的函数了,因为const对象只能用来初始化const引用。
int add(int *a, int *b);
int add(const int *a, const int *b);

//非const对象
int x = 1;
int y = 2;
//cosnt对象
const int r = 1;
const int s = 2;

add(&x, &y); //call add(int *a, int *b);
add(&r, &s); //call add(cosnt int *a, cosnt int *b);
利用带const指针形参进行重载也是合法的,其中的原理和const引用形参完全一样。
应该注意这里是基于指针本身是否为const来实现的重载,而不是指针所指向的对象是否为const。

小程序选项卡以及swiper套用(跨页面) 选项卡tab和swpier之间的套用 其实我之前写过一篇选项卡的切换demo,大家阔以参考一下 小程序多个选项卡切换 那今天写这个demo呢,是因为项目需求,所以仅供参考。 我是拿到了home.wxml的数组下标, 通过url传参的方式去将这个id传到下一个页面, 下一个页面接收以后再将id赋值给对应的tabI或者currentId(swiper 的下标) 实现上一个页面进来以后直接进入对应的页... 阅读详情

相关推荐

TI C2000 , .cmd文件,.TI.ramfunc,将程序分配为在RAM中运行/Flash运行的配置方法和原理讲解,(如28375S ,280049,28335等等芯片)

1 基础知识讲解 1.1 在RAM中运行还是在flash中运行指的是什么? 1.1.1 背景:程序编译完之后生成的.bin文件,.bin文件中包含代码段,代码段中全是汇编指令,而汇编指令中包含多个函数,各函数头的地址不同,如存在A函数和B函数,假设RAM地址区间是0x0000-0x8000,flash的地址区间是0xA000-0xF000,A函数要调用B函数,则A函数调用B函数的那段汇编指令中包含的是B函数头的存储地址,A函数和B函数都在flash中有存储 1.1.2 情况1:B函数是配置为在RAM中运行,

weixin_43776284的博客 8069

c++中const与const&的区别

如果是const int& y=x,则相当于这个值是x的一个别称,x的改变也会影响y的值,同时不能主动修改y,可以在这里认为x和y是描述的是同一个东西。const y=x,这样相当于弄了个新的值y和x是一样的,x的修改不会修改y的值,两者是完全独立的,同时这个y由于是const是不能修改的。...

GXQ的博客 1069

【Isaac Sim】无头服务器远程桌面连接实战:Turbovnc配置与常见问题解决

本文详细介绍了在无头GPU服务器上通过Turbovnc远程桌面连接并运行NVIDIA Isaac Sim的实战教程。针对无图形界面服务器运行仿真软件的核心痛点,文章提供了从Turbovnc安装配置、SSH隧道建立,到以普通用户身份启动服务、解决GLXBadFBConfig等常见图形错误的完整方案,帮助开发者在云端高效部署机器人仿真环境。

weixin_29254673的博客 773

C++ 加const能不能构成重载的几种情况

1.值传递作为参数,加const构不构成重载 int te(const int a) { return a; } int te(int a) { return a; } int main() { int value = 1; std::cout << te(value) << std::endl; } answer: 不构成,而且还会报重定义的错,因为这是值传递,value只是把值传进去了,并不是把自己传进去。 那么修改也是对a的修改,就是在te函数的作用空间的一个值

learner_pu的博客 4317

WebUI自动化测试框架搭建(python+pytest+selenium+allure)

将鼠标移动到要定位的元素上面>右键>点击“检查”>在元素代码上右键>复制>复制XPath。

m0_63729339的博客 1281

在thinkBook16的win11基础上安装ubuntu22.04

背景:联想ThinkBook16 pro 32G/512G,系统盘已安装Win11,加装一条M.2-2T固态,想在2T上分一个300GB的EXT4分区,然后把ubuntu22.04安装在该分区上,并实现Win11+Linux多系统共存。 目标:实现多磁盘下分区管理的简化,优化掉一些不必要的多余的维护性质的分区。

QzmAIoT 4003

const int * 、int * const、int const* 等的区别和联系

前言:很多人都把const int * 、int * const、int const* 的区别和联系搞混,我自己在学习C++的过程中,也经常性          弄不 清楚,今天特意总结一下,作为学习笔记记录下来。 一,const修饰符用于指针         将const用于指针有些很微妙的地方,有两种不同的方式将const关键字用于指针。第一种方法是让指针指向一个常量对象,这样可以防止使用

阿黄啦啦 7614

区块链入门:用账本、乐高和三台旧电脑讲懂分布式账本

区块链是一种去中心化的分布式账本技术,其核心原理是通过密码学哈希、共识机制和链式结构实现数据不可篡改与多方共同验证。它不依赖单一中心,而是将交易记录同步复制到多个节点,依靠数学规则而非人工信任达成一致,从而在数字世界构建可验证的信用基础设施。这种‘集体见证’模式显著提升了系统抗单点故障与人为干预的能力,广泛应用于供应链溯源、数字身份、教育管理及公益透明等需强信任保障的场景。本文以账本类比、乐高拆解和Ganache实操为线索,面向零基础读者通俗解析哈希值、挖矿与智能合约等关键概念。

weixin_30517215的博客 276

const int &x和int const &x和int &x和int x之间区别

转自:https://blog.youkuaiyun.com/Hk_john/article/details/72459549 一:参数的常量引用const int &a和引用 int &a的区别 首先介绍一下为什么我们要使用引用形式进行参数传递。 我们写一个函数 void fun(int a,int b),这样的函数调用时是不会改变参数的值的, 在函数中也就是以一个局部变量的形式存在,当函数...

Atlas!的博客 9749

STM32F407通过SMBus协议精准读取BQ40Z50电池电量

本文详细介绍了STM32F407通过SMBus协议精准读取BQ40Z50电池电量的实现方法。从硬件连接到软件驱动开发,再到通信异常排查,提供了完整的解决方案。重点解析了SMBus协议的特殊时序要求、GPIO模拟驱动的关键代码,以及实际调试中的常见问题与对策,帮助开发者高效完成电池管理系统开发。

weixin_29189003的博客 253

UnityWebGL异常捕获全攻略:从报错提示到完美解决的3种配置方案

本文详细解析了UnityWebGL项目中异常捕获的三种核心配置方案:禁用异常、仅捕获显式异常以及完全捕获异常(无堆栈跟踪)。通过对比不同方案在构建体积、运行性能及错误信息详细度上的差异,帮助开发者根据开发、测试与发布阶段的不同需求,选择并配置最优的异常处理策略,从而有效提升WebGL应用的调试效率和线上稳定性。

5f4d3s2a1q的博客 398

C++中形参与const形参的函数重载问题。

<br />record lookup( phone);<br />record lookup(const phone);<br />这两个属于函数重载吗?<br />这个还需要从实参与形参之间的关系中去寻找答案,这对的区别仅仅在于是否将形参定义为const,这种差异并不影响传递到函数的对象,因此第二个函数声明被视为第一个的重复声明。<br />原因:实参传递方式。复制实参的副本给形参时并不考虑形参是否为const,因为函数操纵的只是副本。函数无法修改实参。因此,既可将const对象传递给const形参,也

yiruirui0507的专栏 3038

RT-DETR改进策略【模型轻量化】| 替换骨干网络为EfficientNet v1 高效的移动倒置瓶颈结构

本文记录的是基于。采用了创新性的方法,通过精心平衡网络和来提升性能。本文将的设计优势融入RT-DETR中,提升RT-DETR的性能与效率,使其在目标检测任务中表现更为出色。本文配置了原模型中的共种不同大小的模型结构,以满足不同的需求。

Limiiiing的博客 533

C++函数重载中形参的const属性,《C++ Primer》

《C++ Primer》(第五版)P208 一个拥有顶层const(const修饰变量自身)的形参无法和另一个没有顶层const的形参区分开来: Record lookup(Phone); Record lookup(const Phone); //编译错,重复声明了Record lookup(Phone) 变量或常量的实参都可以值拷贝给变量或常量的形参,因此无法判断调用上面哪个函数,C++干脆禁止形参列表只分是否是顶层const的重载。顶层const的指针也是如此: Record loo

HayPinF的博客 316

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

函数重载与const形参

函数重载与const形参 在类中,经常需要一些形参不同但相同功能的函数,如果对每一个函数,都给定一个独一无二的函数名,无疑会降低代码的易读性,也不便于维护;对于此情况,通常利用函数重载来解决。 结合自己的经历,介绍一些在函数重载中可能会忽视的点: (1)函数重载可以通过形参的类型或者数量不同来实现; (2)函数重载不能仅仅通过返回值类型不同来实现; (3)在重载中容易忽视的是利用const来实现重载,说实话,在看到此方式之前我是没有注意到这种情况的: 如果形参是某种类型的指针或者引用,通过区分指向的是常量还

qq_45654722的博客 706

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C++中那些令人蛋疼的带const形参的重载函数

发牢骚之前先温习一下重载函数的定义:出现在相同作用域中的两个函数,如果具有相同的名字而形参表不同,则称为重载函数。 根据教条主义,@.@~~哦,说错了,根据教材定义,如果有两个名字相同的函数,二者形参名字和类型都相同,但一个函数的形参带 const 修饰,而另一个函数不带 const 修饰,那么这两个函数应该也是重载函数。就像下面这两个版本: // // 版本 1 // int

rongwenbin的专栏 685

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

函数重载和const形参的函数重载

出现在相同作用域中的两个函数,如果具有相同的名字而形参表不同,则称为重载函数。任何程序都仅有一个 main 函数的实例。main 函数不能重载。 1、函数重载和重复声明的区别 如果两个函数声明的返回类型和形参表完全匹配,则将第二个函数声明视为第一个的重复声明。如果两个函数的形参表完全相同,但返回类型不同,则第二个声明是错误的: Record lookup(const Acco

小米的修行之路 2196

顶层const、底层const、函数重载与const形参

1.顶层const可以表示任意的对象(任何数据类型)是常量。而底层const则与指针和引用等复合类型的基本类型部分有关。 2.对于拷贝操作,顶层const没有什么要求,而底层const要求左值必须比右值更严格。函数重载机制会自动假装忽略掉顶层const而保留底层const。 3.对于函数形参中的引用,尽量使用常量引用。首先,如果使用普通引用,会带给调用者一种误导,即函数可以修改它的实参的值。此外,使用普通引用而非常量引用,也会极大地限制函数所能接受的实参类型。因为我们不能把const对象、字面值或者需要类型

五月花 1962

Primer笔记——显式转换、返回数组指针的函数、const形参函数重载

指针本身是const属性(常量指针),例:int const* p;:指针指向const类型对象空间(指向常量的指针),例:const int* p;只要不是底层const都可以通过该函数转换。该函数可以用来找回存于void*指针中的值。值得注意,如果指针转化后类型并不是数据本身类型,也会报错,结果未定义。使用函数重载时,顶层const不能进行重载,底层可以。原因:传入指针实参时,常量指针和普通指针都能被常量指针指针接收。但指向常量的指针不能被普通指针形参接收,只能被指向常量的指针形参接受。

weixin_61857742的博客 706

c++类拷贝构造函数和类赋值运算符重载函数的形参为什么要加const?

在类的拷贝构造函数和赋值运算符重载函数的形参中添加const。

weixin_41554427的博客 490

函数重载、const形参、默认实参

重载 同一个作用域内的几个函数名字相同但是形参列表不同,我们称之为重载(overload) 不能定义两个函数除了返回类型外其他所用的要素都相同。 重载和const形参 默认实参 调用含有默认实参的函数时,可以包含该实参,也可以省略该实参。注意,一旦某个形参被赋予了默认值,它后面的所有形参都必须有默认值。 函数调用时,默认实参负责填补函数调用缺少的尾部实参(靠右侧

周大侠的专栏 630

C++重载函数 const形参 引用指针 const_cast

一般来说,对于重载函数来说,由于顶层const不影响传入函数的对象,所有两个函数只是顶层const的区别的话,两个函数是等价的,定义为重载函数是非法的。      但是,另一方面,对于指针和引用来说,可以通过区分形参指向的是常量还是非常量来实现函数重载。此时的const是底层的。 Example: Record lookup(Account&); //函数作用于Account的引用 R

u010183589的博客 1648

关于重载函数调用时候const形参的一些问题

<br />多了不说,看下面程序<br /> <br />#include <iostream><br />using namespace std;<br />void f(char&){cout<<"char&"<<endl;}<br />void f(char) {cout<<"char"<<endl; }<br />int main()<br />{ char a='b';<br /> f(a);<br />}<br />结果是二义性,说明了用char调用f时,f(char&)与f(char)一样,是

renyaoming2020的专栏 353
下一篇: 字符数组和字符指针的区别
wait009alone
博客等级 码龄15年 2粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值