考虑以下程序:(见现场演示
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)调用乐趣会使编译成功.
最佳答案 可能3可以解释为其他类型(如char,unsigned …),因此编译器知道要调用哪个函数可能不明确.您需要指示值3是一个长整数.
#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';
}