与函数调用混淆

Confusion with function calls

为什么这个函数调用有效? 函数 func(int,int) 被声明为采用整数,但即使使用 double 调用它也能正常工作。为什么会这样?

#include<iostream>
using namespace std;


void func(int a,int b){


cout<<"a is "<<a;
cout<<"\nb is "<<b;

}

int main(){
func(12.3,34.3);


}

它将 doubles 隐式转换为 ints。您会注意到 func(12.3,34.3); 将它们打印为 12 和 34。当您调用一个函数时,您的编译器会寻找具有最佳匹配签名的函数来调用。在这种情况下,它找到 void func(int, int) 并调用它,因为它可以进行隐式转换。

Why this function call works?

看看implicit conversions。当一个值被复制到兼容类型时,它们会自动执行,intdouble 是(12.3 和 34.3 是双精度数,不是浮点数)。然后,小数位丢失,只打印整数部分。