vla*_*don 5 c++ decltype auto c++14
例如,简单的恒等函子:
template <typename T>
class identity
{
public:
constexpr auto operator ()(T && i) -> decltype(std::forward<T>(i))
{
return std::forward<T>(i);
}
};
Run Code Online (Sandbox Code Playgroud)
返回值有什么更好的(C++14 和更新版本):
-> decltype(std::forward<T>(i)) 或者-> decltype(auto)或者他们是一样的?
或者他们是一样的?
假设你写得正确:
constexpr decltype(auto) operator ()(T && i)
{
return std::forward<T>(i);
}
Run Code Online (Sandbox Code Playgroud)
他们是一样的。[dcl.type.auto.deduct] :
A型
T包含占位符类型,和对应的初始值设定e,被确定如下:
- 对于在使用包含占位符类型的返回类型声明的函数中出现的非丢弃 return 语句,
T是声明的返回类型并且e是 return 语句的操作数。如果 return 语句没有操作数,则e是void();如果占位符是
decltype(auto)类型说明符,T则应为单独的占位符。推导的类型T如 [dcl.type.simple] 中所述确定,就好像e它是decltype
函数的返回类型是从return e;as推导出来的decltype(e)。所以它和一个显式的decltype(std::forward<T>(i)).
什么是更好的
在这种情况下,我会选择“少即是多”。decltype(auto)以更少的冗长为您提供您想要的东西。