这是std::forward
的声明
template< class T >
T&& forward( typename std::remove_reference<T>::type& t );
这个纯右值字符串 "HelloWorld!"
如何作为 std::forward
中的左值引用绑定(bind)到 t
?
std::string&& rstr = std::forward<std::string>("HelloWorld!");
最佳答案
首先,"HelloWorld!"
是一个左值。 (const char 数组)。
但是你的代码使用了重载:
template< class T >
T&& forward( typename std::remove_reference<T>::type&& t );
C 字符串文字可以绑定(bind)到 std::string&&
,通过衰减到 char const *
并用于初始化临时 std::string
。
请注意,稍后使用 rstr
将是未定义的行为,因为临时停止存在于语句末尾。 rstr
的生命周期没有生命周期延长,因为 rstr
绑定(bind)到一个 xvalue 但只有当引用绑定(bind)到 prvalue 时才会发生扩展。
关于c++11 - std forward 采取右值参数如何绑定(bind)到 lvaue 参数引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39058377/