C++ 如何根据条件推断可以返回类型的函数类型?
我有一个模板函数,它接受两种数据类型-int和double,并返回较小的数据类型,现在,我如何推断该函数将返回的类型?现在,我丢失了小数点后的部分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 () {
#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