【发布时间】:2018-03-11 16:49:20
【问题描述】:
谁能解释一下为什么下面的代码会出错?
#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);
}
'auto' 的推导不一致:'int' 然后 'double'
为什么这段代码可以正常工作?
#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);
}
【问题讨论】:
-
要使用多个返回语句进行推导,所有返回语句中的类型必须匹配。没有自动升级到普通类型或类似的东西。 OTOH 在三元运算符中,在任何推导有机会发生之前,会自动将 tge 两个分支转换为公共类型。