4

考虑以下程序:(在此处查看现场演示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 可以使编译成功。

4

1 回答 1

2

可能 3 可以解释为其他类型(例如charunsigned...),因此编译器可能不知道您要调用什么函数。您需要指出值 3 是 a 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';
}
于 2015-10-21T04:38:49.863 回答