【问题标题】:Is forwarding an rvalue as an rvalue a use case?将右值作为右值转发是用例吗?
【发布时间】:2019-08-07 17:18:50
【问题描述】:

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

  1. 左值转发为左值/右值(来自T
template<typename T>
T&& forward(lvalue_Reference v){ 
    return static_cast<T&&>(v); 
};  
  1. rvalues 转发为 rvalues
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 */ }

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

【问题讨论】:

  • 好吧,完全取决于用例:-P ...
  • 第二种情况是通用引用,它同时转发:左值作为左值,右值作为右值。
  • @SamVarshavchik:第二个参数实际上是:rvalue_Reference := typename std::remove_reference_t&lt;T&gt;&amp;&amp;,据我所知不是转发引用(通用引用)......所以你的说法不正确。
  • Possible dupe(类似的问题,但我也写了一个回答这个问题的答案)

标签: c++ c++11 templates perfect-forwarding template-argument-deduction


【解决方案1】:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-01
  • 1970-01-01
  • 2015-12-13
相关资源
最近更新 更多