这个函数调用在C ++中是如何模糊的?

时间:2015-10-21 04:28:18

标签: c++ overloading ambiguous ambiguous-call type-promotion

请考虑以下计划:(请参阅此处的实时演示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);
       ^

但我不明白为什么&amp;怎么模棱两可?这是否涉及任何类型的自动型促销?我知道用(3L)调用乐趣会使编译成功。

1 个答案:

答案 0 :(得分:2)

可能3可以解释为其他类型(如charunsigned ...),因此编译器知道要调用哪个函数可能不明确。您需要指出值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';
}