forward <t>与forward <t &&>相同吗?

时间:2018-08-02 21:32:07

标签: c++ templates c++14 perfect-forwarding

看着the documentation for 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;

两个函数均返回T&&,{如果错误,请更正我)collapses

  • T&,如果T是左值引用
  • T&&,如果T是右值引用,或者T不是引用

对于可能是引用的任意类型T,引用折叠是否总是导致forward<T>forward<T&&>相同?

如果是,是否有任何理由使用forward<T&&>

1 个答案:

答案 0 :(得分:16)

  

引用折叠是否总是导致forward<T>forward<T&&>相同?

是的

  

[I]有任何理由使用forward<T&&>吗?

否。

请注意,这是假设视图中仅有的forward是您在std::中显示的两个重载。