zan*_*ngw 5 c++ overloading language-lawyer
关于C++中的函数重写,以下是合法的,因为两个原型都有不同数量的参数:
void func(int par1, double par2);
void func(int par1, double par2, double par3);
Run Code Online (Sandbox Code Playgroud)
原样(因为至少有一个不同类型的参数):
void func(int par1, double par2);
void func(double par1, double par2);
Run Code Online (Sandbox Code Playgroud)
我想知道,只是因为好奇,你能用同样数量的参数,相同类型但是以不同的顺序重载吗?例如,以下是合法的:
void func(int par1, double par2);
void func(double par1, int par2);
Run Code Online (Sandbox Code Playgroud)
如果是这样,是否有任何正式文件具体说明?
pax*_*blo 10
正式文档是ISO C++标准,是的,你可以做到.
整个ISO C++ 11第13章专门用于重载,但前几段很好地总结了它:
如果为同一范围内的单个名称指定了两个或更多不同的声明,则称该名称为重载.通过扩展,在同一范围内声明相同名称但具有不同类型的两个声明称为重载声明.只有函数和函数模板声明可以重载; 变量和类型声明不能重载.
当在调用中使用重载函数名时,通过比较使用点处的参数类型与在使用点可见的重载声明中的参数类型来确定正在引用哪个重载函数声明. .
如果参数列表不同(包括顺序),则可以进行重载.您在问题中提出的所有三种情况都有所不同:
{int, double} vs {int, double, double}
{int, double} vs {double, double}
{int, double} vs {double, int}
Run Code Online (Sandbox Code Playgroud)
需要注意的是超载是不是可能的两个功能:
void func(int par1, int par2);
void func(int par2, int par1);
Run Code Online (Sandbox Code Playgroud)
因为它实际上只是提供唯一性的类型,而不是参数名称.这两个函数都被调用func,它们都有参数列表{int, int},因此它们不是唯一的.
| 归档时间: |
|
| 查看次数: |
2472 次 |
| 最近记录: |