C++ decltype(auto) or decltype(std::<T>forward(value))?
c++ decltype(auto) or decltype(std::forward<T>(value))?
例如,简单的身份函数:
template <typename T>
class identity
{
public:
constexpr auto operator ()(T && i) -> decltype(std::forward<T>(i))
{
return std::forward<T>(i);
}
};
返回值更好(C 14和更新):
-
-> decltype(std::forward<T>(i))
或 -
-> decltype(auto)
还是相同?
还是它们相同?
假设您正确编写:
constexpr decltype(auto) operator ()(T && i)
{
return std::forward<T>(i);
}
他们是一样的。[dcl.type.auto.deduct]:
包含占位符类型的
T
类型和相应的 初始化器e
,确定如下:
- 对于未录取的返回语句,该语句发生在包含占位符类型的返回类型的函数中,
T
是 声明的返回类型,e
是返回语句的操作数。如果 返回语句没有操作数,则e
是void()
;如果占位符是
decltype(auto)
类型特定符,则T
为 占位符。T
推论的类型被确定为 在[dcl.type.simple]中进行了描述,好像e
是decltype
函数的返回类型是从return e;
推导的,好像由decltype(e)
推论。因此,它与显式decltype(std::forward<T>(i))
相同。
什么更好
在这种情况下,我会选择"更少的是更多"。decltype(auto)
以更少的详细性为您提供了自己的意思。
相关文章:
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- C++decltype和圆括号-为什么
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 如何从"decltype()"获取函数参数的数量<funtion>?
- Confusion: decltype vs std::function
- EASTL矢量<向量<int>>连续的
- decltype(1, t) 应该是 l 值引用吗?(编译器不同意)
- 是否可以在不使用 decltype 的情况下推断先前定义的 extern 变量的类型
- 无效 f(int) 的模板和 decltype
- c++ 11 带有 decltype 的尾随返回类型无法按预期工作
- 我可以使用 decltype() 或其他东西通过指针获取真实类型吗?
- decltype:使用指针访问类的静态成员
- decltype() 不适用于正在编译的类模板
- 在部分模板专用化中使用 decltype
- 非静态成员函数的 decltype 格式不正确吗?
- 是否可以使用单个定义定义函数的常量和常规版本?(使用模板,自动,decltype等)
- 使用具有默认参数的函数模板进行 decltype 会使结果混乱(一个有趣的问题或 gcc 的错误)
- "decltype(&ordenary_func)"和"decltype"(ordenary_func)之间的区别
- 指向具有 decltype 的函数的指针向量
- About std::unique_prt() and decltype()