void add(int,int);
void add(int ,float);
void add(float,int);
unsigned int i = 10;
unsigned float j = 1.0;
add(i,f); // ambiguios call error
如果我从程序中删除 unsigned 那么它工作正常。
int i = 10;
float j = 1.0;
add(i,f); // working
为什么在重载函数中使用无符号变量会导致歧义调用
最佳答案
在 C++ 中没有称为 unsigned float
的东西。 float
总是signed
根据 §7.1.5.2 中的 C++ 标准表 7,“signed”本身就是“int”的同义词。
所以编译器应该给你一个错误,signed
或 unsigned
不适用于 float
。
检查 here , 连 Ideone 都报错。
error: ‘signed’ or ‘unsigned’ invalid for ‘j’
您是否将此错误错误解释为 ambiguos
函数调用错误?
如果删除 unsigned float
,编译器将看不到任何具有参数 unsigned int
和 float
的匹配函数调用,因此它会提升unsigned int
到 int
并使用参数 int
和 float
解析对函数的调用,没有歧义。
Here是 Ideone 上的代码示例。
关于c++ - 如何解决方法重载中的函数调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6381335/