C++ 这个函数调用在C++;?
考虑以下程序:(请参阅此处的实时演示)C++ 这个函数调用在C++;?,c++,overloading,ambiguous,ambiguous-call,type-promotion,C++,Overloading,Ambiguous,Ambiguous Call,Type Promotion,考虑以下程序:(请参阅此处的实时演示) 但我不明白为什么&它是如何模棱两可的?这里是否有任何类型的自动类型升级?我知道使用(3L)调用fun会使编译成功。可能3可以解释为其他类型(如char,unsigned…),因此编译器可能不清楚要调用什么函数。您需要指出值3是一个长int #include <iostream> void fun(int*)=delete; void fun(double)=delete; void fun(char)=delete; void fun(unsi
但我不明白为什么&它是如何模棱两可的?这里是否有任何类型的自动类型升级?我知道使用(3L)调用fun会使编译成功。可能3可以解释为其他类型(如
char
,unsigned
…),因此编译器可能不清楚要调用什么函数。您需要指出值3是一个长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';
}
#包括
void fun(int*)=删除;
无效乐趣(双倍)=删除;
void fun(char)=删除;
无效乐趣(未签名)=删除;
无效乐趣(浮动)=删除;
虚无乐趣(长int);
int main()
{
乐趣((长int)3);
}
虚无乐趣(长整数a)
{
std::coutIt的含义不明确,因为您声明的函数中没有一个采用普通的int
,编译器无法选择是否转换为double
,char
,unsigned int
,float
或long int
d函数仍然参与重载解析。@user657267我认为您可以将其添加为答案:)@user657267:如果您将其添加为答案,这样我就可以接受它。@user657267是或这样称呼它:fun(3L)@PravasiMeet是的,当然。只要您确保编译器不会混淆调用什么。避免使用“C”C++中的风格转换。cast@Krypton,该注释应该是一个答案,在这种情况下,您的答案是没有必要的。但是他们没有,所以您的答案是相关的。但是,为什么在您可以简单地创建类型时强制转换?我相信编译器足够聪明,可以做正确的事情,但是使用c是更好的实践首先,南渡:我个人认为C样式的转换对于简单的标量类型来说更好,C++等价的更冗长,没有明显的优势。
error: call of overloaded 'fun(int)' is ambiguous
fun(3);
^
#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';
}