Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何根据条件推断可以返回类型的函数类型?_C++_Templates_C++11_Casting - Fatal编程技术网

C++ 如何根据条件推断可以返回类型的函数类型?

C++ 如何根据条件推断可以返回类型的函数类型?,c++,templates,c++11,casting,C++,Templates,C++11,Casting,我有一个模板函数,它接受两种数据类型-int和double,并返回较小的数据类型,现在,我如何推断该函数将返回的类型?现在,我丢失了小数点后的部分 #include <iostream> using namespace std; template <class First, class Second> First smaller(First a, Second b){ return (a < b ? a : b); } int main () {

我有一个模板函数,它接受两种数据类型-int和double,并返回较小的数据类型,现在,我如何推断该函数将返回的类型?现在,我丢失了小数点后的部分

#include <iostream>

using namespace std;

template <class First, class Second>
First smaller(First a, Second b){
   return (a < b ? a : b);
}

int main () {
   int x = 100;
   double y = 15.5;
   cout<< smaller (x,y) << endl;

}
#包括
使用名称空间std;
模板
第一个较小(第一个a,第二个b){
返回(acout三元运算符的标准行为是执行“常规算术转换”。在这种情况下,将
int
提升为
double
的方法。 这与
auto x=1/1.0中的情况相同;
是一个
double
,因为整数分子与
double
分母兼容

请参阅的答案。 有“外行术语”和标准引用答案。两者都应该有帮助

但是,您所做的是强制类型为“First”:

template <class First, class Second>
First smaller(First a, Second b){
   return (a < b ? a : b);
}
预期产出:

15
15.5
15.5
15.5

是否希望返回类型取决于哪一个输入较小,或者您希望它查看int和double的输入类型,并决定double是最好的输出类型吗?C++是静态类型的,因此返回类型不能依赖于输入值。如果您试图根据输入来决定函数的返回类型,则不是。你可以描述C++的问题,但不是解决方案,它是声明返回类型为“代码> STD::普通类型::类型< /COD>。简单地使用<代码> AutoSu/Cube >,如你所示,是一个解决方案,但仅针对C++ 14,这个问题被标记为代码> C++ 11 。我们将使用
std::min()
15
15.5
15.5
15.5