例如,简单的身份仿函数:
-> decltype(std::forward<T>(i))
返回值的更好(C ++ 14及更新版本):
-> decltype(auto)
或或者它们是一样的吗?
答案 0 :(得分:4)
或者它们是一样的吗?
假设你写得正确:
constexpr decltype(auto) operator ()(T && i)
{
return std::forward<T>(i);
}
他们是一样的。 [dcl.type.auto.deduct]:
包含占位符类型和相应类型的
T
类型 初始值设定项e
的确定如下:
- 对于在使用包含占位符类型的返回类型声明的函数中发生的非废弃返回语句,
T
是 声明的返回类型,e
是return语句的操作数。如果 return语句没有操作数,e
是void()
;如果占位符是
decltype(auto)
类型说明符,则T
应为 仅占位符。推导出的T
类型被确定为 在[dcl.type.simple]中描述,好像e
是操作数decltype
函数的返回类型是从return e;
推导出来的,就像decltype(e)
一样。所以它与明确的decltype(std::forward<T>(i))
相同。
什么是更好
在这种情况下,我会选择“少即是多”。 decltype(auto)
以较少的冗长度为您提供您所追求的目标。