将右值作为右值转发是用例吗?

Is forwarding an rvalue as an rvalue a use case?

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

我想知道转发: 该标准基本上通过两个重载实现std::forward

将左值
  1. 转发为/右值(T(
template<typename T>
T&& forward(lvalue_Reference v){ 
return static_cast<T&&>(v); 
};  
  1. 将右值转发为右值
template<typename T>
T&& forward(rvalue_Reference v){  
// static-assert: T is not an lvalue-Reference
return static_cast<T&&>(v); 
};  

第一种情况在以下情况下发挥作用

template<typename T>
void foo(T&& a) { doSomething(std::forward<T>(a)); /* a is lvalue -> matches 1. overload */ }

第二种情况是有道理的,但触发它的例子是什么?

我相信这是:

std::forward(( 的右值引用重载的目的是什么?

另请阅读随附的论文:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2951.html