在这种情况下,C ++如何处理函数重载?
#include <iostream>
void func(int x)
{
std::cout << "integer";
}
void func(short x)
{
std::cout << "short";
}
int main(void)
{
func(3);
}
输出:整数
为什么?
答案 0 :(得分:59)
常量也有类型。如果没有后缀表示其他情况,3
只是int
常量。如果常量太大,编译器将选择更大的类型,但默认情况下它不会选择小于int
的值。
现在,它恰好发生了,没有后缀来制作一个短常量。如果您希望调用特定的重载,则需要添加强制转换。
答案 1 :(得分:29)
3
具有常量,并且隐式具有类型int
对于short
重载函数执行,您必须使用short
var或recast
常量。
short s = 3;
fun(s);
或
fun((short)3);
fun(static_cast<short>(3));
short
没有long
- L
这样的后缀,但你可以创建一个。
答案 2 :(得分:17)
答案 3 :(得分:6)
你在做什么
fun(3);
和 3 是一个文字常量整数 ,所以更好地匹配重载的函数是这个
void fun(int x)
{
std::cout << "integer";
}
随意玩这些类型的小玩意儿并投下如下:
fun(short(3));
fun(int(3));
// C++11
auto x = 3;
fun(x);
答案 4 :(得分:6)
常量3
拥有自己的类型,在这种情况下它是int
。如果希望执行重载
short
fun((short)3);