与函数调用混淆

时间:2018-02-15 12:27:56

标签: c++ function-call

为什么这个函数调用有效? 函数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);


}

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:1)

  

为什么这个函数调用有效?

了解implicit conversions。将值复制到兼容类型时会自动执行它们,intdouble是(12.3和34.3是双精度数,而不是浮点数)。然后,十进制数字丢失,只打印整数部分。