- 此问题在此处已有答案**:
the rules in function overloading(2个答案)
16小时前关门了。
我试图写一个重载函数来接受有符号和无符号整数。
下面是我的代码:
#include <iostream>
void fun(const long long a)
{
std::cout << "Signed: " << a << std::endl;
}
void fun(const unsigned long long a)
{
std::cout << "unsigned: " << a << std::endl;
}
int main()
{
unsigned int v = 10;
fun(v);
return 0;
}
这会产生以下编译错误。
main.cpp:17:5: error: call to 'fun' is ambiguous
fun(v);
^~~
main.cpp:4:6: note: candidate function
void fun(const long long a)
^
main.cpp:9:6: note: candidate function
void fun(const unsigned long long a)
^
1 error generated.
我假设它会工作得很好,因为unsigned int
可以用unsigned long long
类型表示。
有人能帮我理解这个错误吗?
1条答案
按热度按时间enxuqcxy1#
一般来说,无符号整数可以隐式转换为更大的(无)符号整数,而不会丢失任何数据,并且在大多数实现中,
(un)signed long long
大于unsigned int
。由于
unsigned int
可以隐式地转换为long long
和unsigned long long
,编译器不知道你要调用哪个重载,因此出现了这个错误。因此,你必须显式地告诉它要使用哪个重载,例如:或者
或者