转发<T>和转发<T&>一样吗?

Is forward<T> the same as forward<T&&>?

本文关键字:转发 gt lt 一样      更新时间:2023-10-16

查看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&&,它(如果我错了,请纠正我)折叠到

  • T&T是否为左值引用
  • T&&T是否是右值引用,或者T是否不是引用

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

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

引用折叠是否总是导致forward<T>执行与forward<T&&>相同的操作?

是的。

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

不。

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