c++11 - 在 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))
解决方案
->decltype(static_cast<_Ty1&&>(_Left)
返回的类型static_cast<_Ty1&&>(_Left)
并将其声明为函数的返回类型。
例如
auto function(int x ) -> int
并且int function(int x )
是相同的
推荐阅读
- node.js - 通过 graphql 从子文档中获取所有数据
- mongodb - 如果 [] 为空,则 mongo go 将其视为 false
- python - python seaborn中的countplot
- swift - Swift 将 Unix 时间戳转换为带时区的日期并将其保存到 EKEvent
- python - Selenium,Scrapy Iteration(单击下一步)仅从第一页中提取项目的 href
- python - 如何找到用方括号括起来的数字后跟一个字符串?
- python - Python大矩阵概率计算
- c# - EEPLUS AutoFitColumns() - 对象引用异常
- python - 为什么在使用不同的 python 版本与 Cython 构建包时他们有不同的 MSVC 编译器?
- c - 找出三个中的中间数(没有 if-else 等)