如何在C ++中进行重载?我定义了两个重载函数,一个采用浮点数,另一个采用整数:
void myFunc(float a) { ... }
void myFunc(int a) { ... }
但是每当我尝试传递一个整数时,我都不能使用int版本,编译器会对一个模糊的调用感到恐慌。我只能使用浮动版本。不可思议?
感谢。
答案 0 :(得分:3)
void f(int x)
{}
void f(float x)
{}
int main()
{
int a = 2;
f(a); //will unambiguously call f(int)
f(3); //will unambiguously call f(int)
}
为什么呢?因为int->int
是exact match
,它始终优于int-> float,即match with standard conversion
。
如果这不是您遇到的行为,那么您的编译器是一个糟糕的编译器。无论如何,重载决策规则有点复杂。 This link可能有助于阐明它
答案 1 :(得分:1)
但是我不能使用int版本 每当我尝试传递一个整数时 编译器对一个含糊不清的恐慌 调用
没有。它不能抱怨,如果你把它称为,
int i=10;
myFunc(i); //myFunc(int) gets called!
myFunc(1); //again myFunc(int) gets called!
在这里看到自己:http://ideone.com/RI33a
没有歧义!
答案 2 :(得分:0)
您可能无意中使用char
或double
调用它,编译器无法确定您实际需要的版本。