C++ 汽车保险不一致扣减

C++ 汽车保险不一致扣减,c++,templates,auto,C++,Templates,Auto,有人能解释一下为什么下面的代码会出错吗 #include <iostream> using namespace std; template <typename aa, typename bb> auto minimum(aa a, bb b) { if (a < b) return a; else return b; } int main() { cout << minimum(7, 5.1); } #包括

有人能解释一下为什么下面的代码会出错吗

#include <iostream>
using namespace std;

template <typename aa, typename bb>
auto minimum(aa a, bb b)
{
        if (a < b) return a;
        else return b;
}

int main()
{
    cout << minimum(7, 5.1);
}
#包括
使用名称空间std;
模板
自动最小值(aa a、bb b)
{
如果(a可能比我聪明的人可以引用标准的相关部分,但简短的版本是三元运算符的工作方式不同于
if
/
else
。第一个示例(
if
/
else
),您有两个不同的
return
s,并且可能
return
使用不同的类型(您在示例中就是这样做的)。函数必须
return
单个类型,因此它不知道哪个是正确的(即,是将
int
升级为
double
还是将
double
降级为
int


在第二个示例中,三元运算符可以根据参数(特别是后两个参数)确定适当的类型。在您的示例中,它将始终将结果视为
double
,因此您的函数知道返回
所需的是

比我聪明的人可以引用标准的相关部分,但简短的版本是,三元运算符的工作方式不同于
if
/
else
le(
if
/
else
),您有两个不同的
返回
s,并且您可能正在使用不同的类型(在您的示例中就是这样做的)。函数必须
返回一个类型,因此它不知道哪个是正确的(即,是将
int
升级为
double
还是将
double
降级为
int


在第二个示例中,三元运算符可以根据参数(特别是后两个参数)确定适当的类型。在您的示例中,它将始终将结果视为
double
,因此您的函数知道它需要
返回

在第一种情况下,您有两个单独的
return
语句返回不同的数据类型,因为
a
int
b
double
,因此
 auto
不知道要推断哪种数据类型


在第二种情况下,
?:
运算符的结果是一个特定的数据类型,并且只有一个
return
语句,因此
auto
知道要推断哪种数据类型不会产生混淆。

在第一种情况下,您有两个单独的
return
语句返回不同的数据类型,如
a
是一个
int
b
是一个
double
,因此
auto
不知道要推断哪种数据类型


在第二种情况下,
?:
运算符的结果是一个特定的数据类型,并且只有一个
return
语句,因此
auto
不会混淆要推断哪种数据类型。

对于使用多个return语句的推断,所有return语句中的类型都必须匹配。没有自动操作提升到公共类型或类似的类型。在三元运算符中,在任何演绎有机会发生之前,tge两个分支会自动转换为公共类型。对于使用多个返回语句的演绎,所有返回语句中的类型都必须匹配。没有自动提升到公共类型o在三元运算符中,在任何演绎发生之前,tge的两个分支会自动转换为普通类型。
#include <iostream>
using namespace std;

template <typename aa, typename bb>
auto minimum(aa a, bb b)
{
     return a < b ? a : b;    
}

int main()
{
    cout << minimum(7, 5.1);
}