Ope*_*992 4 c++ overloading function
编译以下代码时:
#include <iostream>
using namespace std;
void print(int i){
cout << i << endl;
}
void print(float i){
cout << i << endl;
}
int main(){
print(5);
print(5.5)
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:
调用重载'print(double)'是不明确的.
但是,如果我改变了
void print(float i){
Run Code Online (Sandbox Code Playgroud)
至
void print(double i){
Run Code Online (Sandbox Code Playgroud)
代码编译.这是为什么?
尝试不同的练习来理解这一点.删除两个重载中的任何一个将使程序编译,尽管文字没有标识匹配5.5,一个double值,它可以隐式转换为int或float.
当两个重载都存在时,因为5.5可以隐式转换为a int或者float两者都是可行的.编译器无法在两者之间做出决定,因此错误.
在使文字成为a float时5.5f,我们有一个标识匹配,float重载并且在编译器的决策中没有歧义.相反,保持文字double,5.5,改变功能从原型float到double同样适用,因为这是一种身份的比赛也是如此.