与函数调用混淆
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。当一个值被复制到兼容类型时,它们会自动执行,int
和 double
是(12.3 和 34.3 是双精度数,不是浮点数)。然后,小数位丢失,只打印整数部分。
为什么这个函数调用有效?
函数 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。当一个值被复制到兼容类型时,它们会自动执行,int
和 double
是(12.3 和 34.3 是双精度数,不是浮点数)。然后,小数位丢失,只打印整数部分。