向前<T>与向前<T &&>相同吗?

Tay*_*ols 12 c++ templates perfect-forwarding c++14

查看文档std::forward,

template< class T >
constexpr T&& forward( typename std::remove_reference<T>::type& t ) noexcept;
template< class T >
constexpr T&& forward( typename std::remove_reference<T>::type&& t ) noexcept;
Run Code Online (Sandbox Code Playgroud)

这两个函数返回T&&,这(纠正我,如果我错了)折叠

  • T&if T是左值引用
  • T&&if T是rvalue引用,或者T不是引用

对于T可能作为参考的任意类型,参考折叠总是导致forward<T>做同样的事情forward<T&&>吗?

如果是这样,有什么理由可以使用forward<T&&>吗?

T.C*_*.C. 16

参考折叠总是导致forward<T>做同样的事情forward<T&&>吗?

是.

[我]有什么理由可以使用forward<T&&>吗?

没有.

请注意,这假设forward视图中唯一的s是您显示的两个重载std::.