函数返回 Int 而不是 float
Function returning Int instead of float
我正在 C++ 中试验函数指针和 lambda,我的函数定义如下 -
float max(float a, float b){
std::cout<<"In float max"<<std::endl;
return (a > b) ? a : b;
}
int max(int a, int b){
std::cout<<"In Int max"<<std::endl;
return (a > b) ? a : b;
}
template<typename type1, typename type2>
int compareNumber(type1 a, type1 b, type2 function){
return function(a, b);
}
从我的主要功能,我调用它如下 -
int main(){
std::cout<<compareNumber<float, float (float, float )>(5.2542f, 2.314f, max)<<std::endl;
std::cout<<compareNumber<float>(1.3467f, 2.6721f, [=](float a, float b){
return (a > b) ? a:b;
})<<std::endl;
std::cout<<max(5.3f, 2.7f)<<std::endl;
std::cout<<max(1, 2)<<std::endl;
}
问题是,如果我只是单独调用该函数,则会得到正确的值 returned,但是当使用 lambda 函数或函数指针时,由于我的原因,这些值会强制转换为 int无法指出。
这是我的输出 -
In float max
5
2
In float max
5.3
In Int max
2
我检查了输出的输出类型,确实是一个整数。我已经检查如下-
std::cout<<std::is_same<int, decltype(compareNumber<float, float (float, float )>(5.2542f, 2.314f, max))>()<<std::endl;
上面的代码片段打印 1.
谁能告诉我这里到底发生了什么?
TIA
PS - 我刚刚意识到 return 类型是 int
而不是 type1
并且没有想太多就发布了这个问题着急。抱歉这个小问题
template<typename type1, typename type2>
int compareNumber(type1 a, type1 b, type2 function){
return function(a, b);
}
有你的代码,你已经将“int compareNumber”更改为“type1 compareNumber”,因为你不知道你会得到什么类型的变量
template<typename type1, typename type2>
type1 compareNumber(type1 a, type1 b, type2 function){
return function(a, b);
}
我刚刚注意到,compare
函数的 return 类型是 int
而不是 type1
。这完全错过了我的眼睛。很抱歉这个琐碎的问题。
我正在 C++ 中试验函数指针和 lambda,我的函数定义如下 -
float max(float a, float b){
std::cout<<"In float max"<<std::endl;
return (a > b) ? a : b;
}
int max(int a, int b){
std::cout<<"In Int max"<<std::endl;
return (a > b) ? a : b;
}
template<typename type1, typename type2>
int compareNumber(type1 a, type1 b, type2 function){
return function(a, b);
}
从我的主要功能,我调用它如下 -
int main(){
std::cout<<compareNumber<float, float (float, float )>(5.2542f, 2.314f, max)<<std::endl;
std::cout<<compareNumber<float>(1.3467f, 2.6721f, [=](float a, float b){
return (a > b) ? a:b;
})<<std::endl;
std::cout<<max(5.3f, 2.7f)<<std::endl;
std::cout<<max(1, 2)<<std::endl;
}
问题是,如果我只是单独调用该函数,则会得到正确的值 returned,但是当使用 lambda 函数或函数指针时,由于我的原因,这些值会强制转换为 int无法指出。
这是我的输出 -
In float max
5
2
In float max
5.3
In Int max
2
我检查了输出的输出类型,确实是一个整数。我已经检查如下-
std::cout<<std::is_same<int, decltype(compareNumber<float, float (float, float )>(5.2542f, 2.314f, max))>()<<std::endl;
上面的代码片段打印 1.
谁能告诉我这里到底发生了什么?
TIA
PS - 我刚刚意识到 return 类型是 int
而不是 type1
并且没有想太多就发布了这个问题着急。抱歉这个小问题
template<typename type1, typename type2>
int compareNumber(type1 a, type1 b, type2 function){
return function(a, b);
}
有你的代码,你已经将“int compareNumber”更改为“type1 compareNumber”,因为你不知道你会得到什么类型的变量
template<typename type1, typename type2>
type1 compareNumber(type1 a, type1 b, type2 function){
return function(a, b);
}
我刚刚注意到,compare
函数的 return 类型是 int
而不是 type1
。这完全错过了我的眼睛。很抱歉这个琐碎的问题。