c++ 函数重载踩坑记


前言

 函数重载是C++开发者都会用到的一个知识点,看上去也挺简单的,一目了然,根本没有任何技术含量可言。
 作为一个C++使用了几年的小白,我也是这么认为的,直到早上蹲坑刷知乎的时候,看到陈硕大佬的C++重载决议相
 关文章,才发现,C++真是一年精通,三年熟悉,五年了解,十年用过。

一、你觉得会匹配哪个重载函数?

作为公司的一位老鸟,你在某天写了一个函数:
void setData(bool bWrite)
{
cout << “bool” << endl;
}

调用的时候,setData(true);多简单,bug free,不愧为公司的骨干。

后来某天,公司业务扩展,来了位菜鸟,发现这个函数需要重载,得加个string类型的参数:
void setData(const string& strName)
{
cout << “string” << endl;
}
调用的时候 setData(“LaoSiJi”); 写完代码,键盘一推,顺手把头发往后一捋,用飘柔就是这么自信,原理写代码就是这么回事嘛,今天又可以不用加班了。

二、你以为的只是你以为的

菜鸟回到家,正打着游戏,突然测试测试妹纸来电话了,心里还想着,难道好事来了。好事的确来了,妹纸笑嘻嘻地和菜鸟说,你的代码出了bug。

1.分析下过程

“LaoSiJi” 是const char *类型,注意,不是string,因为C++常用的预定义数据类型有字符类型、整数类型、浮点数类型、布尔类型、无类型和宽字符类型等,这其中不包括string类型。
而函数参数const char * 想要匹配string类型需要程序员进行显示指定转换,这不属于标准转换;

观察其他重载版本 bool ,标准转换认为将const char *转换成bool是最接近的类型。

所以,最终菜鸟的程序中调用了bool的重载版本,而不是string。

总结

人总是会犯错误的,保持敬畏之心很重要,很多时候重大的bug就是因为细小的地方疏忽没注意到,或者是知识盲区。做到基本的单元测试很重要,我们能做的其实很少,遵守软件开发的基本套路,有些问题它也就不存在,自然不需要996加班了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值