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);
}