这个函数调用在 C++ 中是如何模糊的?
How this function call is ambiguous in C++?
考虑以下程序:(在此处查看现场演示 http://ideone.com/7VHdoU)
#include <iostream>
void fun(int*)=delete;
void fun(double)=delete;
void fun(char)=delete;
void fun(unsigned)=delete;
void fun(float)=delete;
void fun(long int);
int main()
{
fun(3);
}
void fun(long int a)
{
std::cout<<a<<'\n';
}
编译器给出以下错误:
error: call of overloaded 'fun(int)' is ambiguous
fun(3);
^
但我不明白为什么以及如何模棱两可?这里是否涉及任何类型的自动促销?我知道用 (3L) 调用 fun 可以使编译成功。
可能 3 可以解释为其他类型(如 char
、unsigned
...),因此编译器可能不清楚您要调用的函数。您需要指明值 3 是 long int
.
#include <iostream>
void fun(int*)=delete;
void fun(double)=delete;
void fun(char)=delete;
void fun(unsigned)=delete;
void fun(float)=delete;
void fun(long int);
int main()
{
fun((long int)3);
}
void fun(long int a)
{
std::cout<<a<<'\n';
}
考虑以下程序:(在此处查看现场演示 http://ideone.com/7VHdoU)
#include <iostream>
void fun(int*)=delete;
void fun(double)=delete;
void fun(char)=delete;
void fun(unsigned)=delete;
void fun(float)=delete;
void fun(long int);
int main()
{
fun(3);
}
void fun(long int a)
{
std::cout<<a<<'\n';
}
编译器给出以下错误:
error: call of overloaded 'fun(int)' is ambiguous
fun(3);
^
但我不明白为什么以及如何模棱两可?这里是否涉及任何类型的自动促销?我知道用 (3L) 调用 fun 可以使编译成功。
可能 3 可以解释为其他类型(如 char
、unsigned
...),因此编译器可能不清楚您要调用的函数。您需要指明值 3 是 long int
.
#include <iostream>
void fun(int*)=delete;
void fun(double)=delete;
void fun(char)=delete;
void fun(unsigned)=delete;
void fun(float)=delete;
void fun(long int);
int main()
{
fun((long int)3);
}
void fun(long int a)
{
std::cout<<a<<'\n';
}