重载函数中数据类型的优先级如何?

Vis*_*ngh 3 c++

我有3个函数重载.重载函数中数据类型的优先级如何?

#include <iostream>

using namespace std;

void myfunc (int i) {
    cout << "int" << endl;
}

void myfunc (double i) {
    cout << "double" << endl;
}

void myfunc (float i) {
    cout << "float" << endl;
}

int main () {
    myfunc(1);
    float x = 1.0;
    myfunc(x);
    myfunc(1.0);
    myfunc(15.0);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

int
float
double
double
Run Code Online (Sandbox Code Playgroud)

程序如何决定调用float还是double?

Pra*_*han 7

文字有明确定义的类型.特别是,浮点文字具有类型,double除非加上后缀.后缀为fF使其成为类型的文字,float而后缀为lL使其成为类型的文字long double.

这解释了观察到的重载分辨率:

myfunc(x);//calls myfunc(float) since x is a float
myfunc(1.0);//calls myfunc(double) since 1.0 is a double
myfunc(15.0);//calls myfunc(double) since 15.0 is a double
Run Code Online (Sandbox Code Playgroud)

类似的推理也适用于整数文字 - 1是文字的类型int.