c ++ decltype(auto)或decltype(std :: forward <t>(value))?

时间:2017-12-20 13:56:58

标签: c++ c++14 auto decltype

例如,简单的身份仿函数:

-> decltype(std::forward<T>(i))

返回值的更好(C ++ 14及更新版本):

  • -> decltype(auto)
  • {{1}}

或者它们是一样的吗?

1 个答案:

答案 0 :(得分:4)

  

或者它们是一样的吗?

假设你写得正确:

constexpr decltype(auto) operator ()(T && i)
{
    return std::forward<T>(i);
}

他们是一样的。 [dcl.type.auto.deduct]

  

包含占位符类型和相应类型的T类型   初始值设定项e的确定如下:

     
      
  • 对于在使用包含占位符类型的返回类型声明的函数中发生的非废弃返回语句, T是   声明的返回类型,e是return语句的操作数。如果   return语句没有操作数,evoid();
  •   
     

如果占位符是decltype(auto)类型说明符,则T应为   仅占位符。推导出的T类型被确定为   在[dcl.type.simple]中描述,好像e是操作数   decltype

函数的返回类型是从return e;推导出来的,就像decltype(e)一样。所以它与明确的decltype(std::forward<T>(i))相同。

  

什么是更好

在这种情况下,我会选择“少即是多”。 decltype(auto)以较少的冗长度为您提供您所追求的目标。