C++11 auto 和 decltype

Tro*_*bao 5 c++ conditional-operator decltype auto c++11

当阅读有关 auto 和 decltype (C++11) 的内容时,我看到以下函数

auto findMin(A a, B b) -> decltype(a < b ? a : b)
{
    return (a < b) ? a : b;
}
Run Code Online (Sandbox Code Playgroud)

这部分 -> decltype(a < b ? a : b) 对我来说很奇怪。什么样的函数声明或者它只适用于 auto 和 decltype ?

And*_* DM 4

这部分 -> decltype(a < b ? a : b) 对我来说很奇怪。什么样的函数声明或者它只适用于 auto 和 decltype ?

->后面的箭头auto和括号表示尾随返回类型,它允许您在了解函数参数后指定返回类型 - 如果您愿意的话,可以更自由。

decltype给我们声明的类型,这允许我们检查表达式的类型。

在三元表达式中a < b ? a : b,表达式的类型是和之间的公共类型。也就是说, for和常见类型是as提升到。abintdoubledoubleintdouble

然后decltype使用上述表达式进行调用,为我们提供通用类型,该类型将是返回值的类型。该函数仍然需要返回一个值,因此我们也在那里看到了表达式。decltype(a < b ? a : b)findMin


Ps 三元表达式的常见类型行为由特征捕获std::common_type(自 c++11 起)