Ang*_*uck 17 c++ default overloading
我仍然相对较新的C++,我似乎无法弄清楚以下两种编码函数的方式的差异,这可能需要一个参数,或者可能需要两个或三个或更多.无论如何,这是我的观点
功能过载:
int aClass::doSomething(int required)
{
//DO SOMETHING
}
int aClass::doSomething(int required, int optional)
{
//DO SOMETHING
}
Run Code Online (Sandbox Code Playgroud)
这有什么不同,默认值:
int aClass::doSomething(int required, int optional = 0)
{
//DO SOMETHING
}
Run Code Online (Sandbox Code Playgroud)
我知道在不同的情况下,一个人可能比另一个人更合适,但在选择这些选项时,我应该注意哪些事情?
Sha*_*our 20
有几个技术原因需要重载到默认参数,它们在默认参数部分的 Google C++样式指南中有详细说明:
函数指针在存在默认参数时会引起混淆,因为函数签名通常与调用签名不匹配.向现有函数添加默认参数会更改其类型,这可能会导致代码获取其地址时出现问题.添加函数重载可以避免这些问题.
和:
默认参数可能导致批量代码,因为它们在每个调用站点都被复制 - 而不是重载函数,其中"默认"仅出现在函数定义中.
积极的一面是:
通常你有一个使用默认值的函数,但偶尔你想要覆盖默认值.默认参数允许一种简单的方法来执行此操作,而无需为罕见的异常定义许多函数.
因此,您的选择将取决于您的应用程序的负面问题的相关性.
首先,你谈论的是重载,而不是重写.对virtual
派生类中的函数进行重写.重载是指具有不同签名的相同函数名称.
差异是合乎逻辑的 - 在第一种情况下(2个版本),两个函数可以表现完全不同,而第二个案例将具有或多或少相同的逻辑.这完全取决于你.
归档时间: |
|
查看次数: |
6882 次 |
最近记录: |