函数double如何工作?C++

Fin*_*ner -2 c++ function

你能解释一下这些功能是如何工作的吗?

double f(int i)
{
    cout<<"a";
    return 1;
}

int f(double i)
{
    cout<<"b";
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

对于:

f(f(f(1)));
Run Code Online (Sandbox Code Playgroud)

在我看来,结果应该是: aaa 但它确实如此aba

同样的情况,f(f(f(1.1))); 我认为应该有,aab 但有bab

iBu*_*Bug 15

从函数返回时,返回值的类型是根据函数原型确定,而不是按原样编写的.如果类型不匹配,它将被隐式转换为正确的类型.所以这个示例函数:

double foo(void) { return 1; }
Run Code Online (Sandbox Code Playgroud)

实际上是返回double(1),或等效地1.0.它并没有返回int,因为1是int类型.但是,它会将您转换int为一个double值,以匹配声明的函数的返回值类型.

所以提出你的问题,调用的最内层函数是double f(int),第二个函数叫做int f(double),而最外面的函数叫做double f(int).这符合你看到的输出:aba.

f( f( f(1) ) );
?  ?  ?
|  |  calls double f(int)
|  calls int f(double)
calls double f(int)
Run Code Online (Sandbox Code Playgroud)


Kri*_*hev 5

编译器读取f(f(f(1)));函数的方式是由内而外.让我详细说明,编译器看到f(1);它并查找一个名为f的函数,该函数将int作为参数,这样就可以了:

 double f(int i)
{
    cout<<"a";
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

现在,一旦你的函数执行,它返回一个double,因此第二个f接受一个double - >调用你的下一个函数需要double

int f(double i)
{
    cout<<"b";
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

按照上面解释的逻辑,我们已经到达了你的三重问题的最后/外层.现在编译器有一个int并且正在寻找一个名为f的函数,它接受int - >这是你第一个声明的函数.

这就是为什么你得到aba的原因.