effective C++笔记之条款24、25:在函数重载和设定参数缺省值间慎重选择、避免指针和数字类型重载

本文探讨了函数重载和设定参数缺省值之间的区别,并提供了选择使用哪种方式的指导原则。当存在合适的缺省值且仅需一种算法时,推荐使用缺省值;否则,应使用函数重载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

条款24:在函数重载和设定参数缺省值间慎重选择

l        会对函数重载和设定参数缺省值产生混淆的原因在于,他们都允许一个函数以多种方式被调用。

l        到底用哪个取决于两个问题。

  1. 确实有那么一个值可以作为缺省吗?
  2. 要用到多少种算法?

一般来说,如果可以选择一个合适的缺省值并且只是用到一种算法,就使用缺省值,否则,就用函数重载。

l        设定参数缺省值的情况:

max函数:最关键的一点是,不管函数的调用者提供几个参数,max计算时采用的是相同的算法。在函数内部任何地方都不用在意哪些是“真”的,哪些是缺省值;而且,所选用的缺省值不可能影响到算法计算的正确性。

l        重载函数的情况:

  1. 会遇到找不到缺省值的情况。如计算平均值
  2. 想完成一个特殊的任务,但算法取决于给定的输入值。这种情况对于构造函数很常见:默认构造函数与拷贝构造函数就是如此。

 

条款25: 避免指针和数字类型重载

l        因为对于如下函数:void f(int x);

void f(string*ps);

f(0);

0是一个int,所以总是f(int)被调用。但这有时不是我们所希望的。

l        解决方法是使用成员函数模板,即使NULL成为一个“包含一个隐式类型转换运算符”的类的对象,对每一个T类型,运作起来都像static<T*>(0)这样。例如调用f(NULL),这时就回去调用void f(string *ps);

l        但是这种解决方法只有在你是调用者时候才有意义,因为你不能防止使用它的人仍然这样使用f(0);但其实他还是调用了f(int);

l        所以作为重载函数的设计者,只要有可能,就要避免对一个数字和一个指针类型重载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值