如何在编译时确定此返回类型?

时间:2011-11-19 16:09:23

标签: c++ templates

  

可能重复:
  Why is this “min” template of cpp-next at fault?

从另一个问题我得到了这个功能模板:

template <class T, class U>
auto min(T x, U y) -> decltype(x < y ? x : y) {
    return x < y ? x : y;
}

它编译并且似乎工作正常,但我不确定它为什么有效。如何在编译时推导出返回类型? - 我认为它可以是TU,具体取决于哪个参数较小,而且只能在运行时确定。

1 个答案:

答案 0 :(得分:2)

a ? b : c形式的表达式始终返回相同的类型,无论a是否为真值。如果bc属于不同类型,则会进行类型提升,就像3 + 4.2评估为7.2时一样(通过double(3) + 4.2)。