如果使用unsigned,为什么重载会导致模糊调用?

Sur*_*uri 1 c++ visual-c++

void foo(int,int) {}
void foo(int ,float) {}
void foo(float,int) {}

void main()
{
  unsigned int i = 10;
  unsigned float f = 1.0;       //line 5
  foo(i,f); // ambiguous call error
}
Run Code Online (Sandbox Code Playgroud)

替换第5行

float f = 1.0;
Run Code Online (Sandbox Code Playgroud)

使程序工作.为什么会这样?

我正在开发visual studio 2005.

Pra*_*ian 5

没有这样的数据类型unsigned float.注意编译器警告; 如果你没有得到提升警告水平.从在Visual Studio 2010上运行此示例看起来,编译器会忽略float声明中的关键字

unsigned float f = 1.0;
Run Code Online (Sandbox Code Playgroud)

这样做funsigned int.既然你没有过载的foo()接受一个intunsigned int编译器无法推断其超载打电话.如果添加另一个重载

void foo(int,unsigned int) {}
Run Code Online (Sandbox Code Playgroud)

模糊的呼叫错误消失了.