从另一个问题我得到了这个功能模板:
template <class T, class U>
auto min(T x, U y) -> decltype(x < y ? x : y) {
return x < y ? x : y;
}
它编译并且似乎工作正常,但我不确定它为什么有效。如何在编译时推导出返回类型? - 我认为它可以是T
或U
,具体取决于哪个参数较小,而且只能在运行时确定。
答案 0 :(得分:2)
a ? b : c
形式的表达式始终返回相同的类型,无论a
是否为真值。如果b
和c
属于不同类型,则会进行类型提升,就像3 + 4.2
评估为7.2
时一样(通过double(3) + 4.2
)。