如何调用的函数是重载的函数匹配
在三种可能的结果,重载函数,结果打电话:
1)找到一个匹配的。为解决一个特定的重载函数。
2)没有找到匹配。这个论点不能匹配任何重载的函数。
3)发现了一个模糊匹配。参数匹配的多个重载的函数。
当一个重载的调用函数,C + +通过以下过程来确定哪些版本的功能将被称为:
1)首先,C++试图找到完全匹配。这是实际的参数完全匹配的重载函数的参数类型的情况下。比如说呢。
1
2
3
4
|
void
Print(
char
*szValue);
void
Print(
int
nValue);
Print(0);
// exact match with Print(int)
|
虽然0可以在技术上与打印(char *),它完全匹配的print(int)。因此,打印(int)是可用的最佳匹配。
2)如果找不到精确匹配,C + +试图通过推广找到一个匹配。在类型转换和铸造的教训,我们介绍了如何可以促进某些类型自动通过内部类型转换到其他类型。总结,
无符号字符,字符,和短提升到int
无符号短可提升为int或无符号整数,这取决于一个int大小
浮升双
枚举被提升为int型
比如说呢。
1
2
3
4
|
void
Print(
char
*szValue);
void
Print(
int
nValue);
Print(
'a'
);
// promoted to match Print(int)
|
在这种情况下,因为没有打印(炭),字符“A”是提升为一个整数,然后匹配print(int)。
3)如果没有促销的发现,C + +试图通过找到一个匹配的标准转换。标准转换包括:
任何数字类型将其他任何数字类型的比赛,包括无符号(如int浮动)
枚举将一个数字类型的正式比赛(如枚举浮动)
零将匹配一个指针式和数字类型(如0到char*,或0浮动)
指针将匹配一个空指针
比如说呢。