首页 > 解决方案 > 在 C++ 11 中的函数声明之后,'->' 是什么意思?

问题描述

在 operator() 签名之后使用 '-> decltype' 的语法是什么?它的用途是什么?

template<>
struct less<void>
{   // transparent functor for operator<
typedef int is_transparent;

template<class _Ty1,
    class _Ty2>
    constexpr auto operator()(_Ty1&& _Left, _Ty2&& _Right) const
    -> decltype(static_cast<_Ty1&&>(_Left)
        < static_cast<_Ty2&&>(_Right))
    {   // transparently apply operator< to operands
    return (static_cast<_Ty1&&>(_Left)
        < static_cast<_Ty2&&>(_Right));
    }
};

这是来自 C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.15.26726\include\xstddef 第 276 行的代码。

为什么以下两行重复?

(static_cast<_Ty1&&>(_Left)
        < static_cast<_Ty2&&>(_Right))

标签: c++11

解决方案


->decltype(static_cast<_Ty1&&>(_Left)返回的类型static_cast<_Ty1&&>(_Left)并将其声明为函数的返回类型。

例如

auto function(int x ) -> int并且int function(int x )是相同的


推荐阅读