将右值作为右值转发是用例吗?
Is forwarding an rvalue as an rvalue a use case?
我想知道转发:
标准实现 std::forward
基本上有两个重载:
- 将 lvalues 转发为 lvalues/rvalues(取决于
T
)
template<typename T>
T&& forward(lvalue_Reference v){
return static_cast<T&&>(v);
};
- 将 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 */ }
第二种情况有道理,但触发它的例子是什么?
我相信这是重复的:
另请阅读随附的论文:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2951.html
我想知道转发:
标准实现 std::forward
基本上有两个重载:
- 将 lvalues 转发为 lvalues/rvalues(取决于
T
)
template<typename T>
T&& forward(lvalue_Reference v){
return static_cast<T&&>(v);
};
- 将 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 */ }
第二种情况有道理,但触发它的例子是什么?
我相信这是重复的:
另请阅读随附的论文:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2951.html