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

本文讨论了C++中关于形参是否为const的函数重载问题。虽然const形参和非const形参在理论上可以接收相同的实参,但编译器会区分它们,导致二义性。当形参为非引用类型时,两者视为等价;而引用形参时,const与非const则被视为不同。实验表明,对于非const引用,编译器优先匹配非const形参的函数。
摘要由CSDN通过智能技术生成

record lookup( phone);

record lookup(const phone);

这两个属于函数重载吗?

这个还需要从实参与形参之间的关系中去寻找答案,这对的区别仅仅在于是否将形参定义为const,这种差异并不影响传递到函数的对象,因此第二个函数声明被视为第一个的重复声明。

原因:实参传递方式。复制实参的副本给形参时并不考虑形参是否为const,因为函数操纵的只是副本。函数无法修改实参。因此,既可将const对象传递给const形参,也可传递给非const形参,这两种形参并无本质区别。

比如:

record lookup(15001805405);//这里就假设传递个本人的手机号码吧

此时该调用上面哪个函数呢?很明显两个都可以,形参跟实参都有属于各自的爹妈,各自的空间,互不干涉。

然而这个时候编译器就会傻眼,二义性问题,编译器就成了sb了,因此结论:这组函数不属于函数重载。

ps:形参与const形参的等价性仅仅适用于非引用形参。有const引用形参的函数与有非const引用形参的函数是不同的。类似的,如果函数带有指向const类型的指针形参,则与带有指向相同类型的非const对象的指针形参的函数不形同。

 

record lookup(const phone&);

record lookup(phone&);

那这两个呢?属于函数重载吗?

答案是属于。肯定属于。

比如:

const  phone a=15001805405;//贡献第二次

record lookup(a);这个该调用那个呢?

很明显大家

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值