提问人:Ramtin Farajollahi 提问时间:12/1/2022 更新时间:12/1/2022 访问量:57
函数重载,在 C++ 中对常量引用和传递值进行隐式转换
Function overloading with implicit conversion on const reference and pass by value in C++
问:
这里我们有函数重载,只有具有“double”类型参数的参数才能选择隐式转换,很明显为什么编译器选择这个(double 版本)版本的函数
double max(double a, double b){
std::cout<< "double max called" << std::endl;
return (a>b)?a:b;
}
int& max(int& a, int& b){
std::cout << "int max called" << std::endl;
return (a>b)?a:b;
}
int main(){
char a{6};
char b{9};
auto result = max(a,b);
return 0;
}
但是,当我们将第二个函数的参数更改为 const int& 时,我们使隐式转换成为可能。为什么这两个版本都需要进行隐式转换,但编译器选择带有“const int&”类型参数的版本。是因为它更接近类型“char”,还是编译器中有某种规则?
double max(double a, double b){
std::cout<< "double max called" << std::endl;
return (a>b)?a:b;
}
const int& max(const int& a, const int& b){
std::cout << "int max called" << std::endl;
return (a>b)?a:b;
}
int main(){
char a{6};
char b{9};
auto result = max(a,b);
return 0;
}
我希望编译器始终坚持使用更简单的版本,即按值传递
答: 暂无答案
评论
char
int
char
double
)