std forward如何将rvalue参数绑定到lvaue param引用

时间:2016-08-20 20:18:43

标签: c++11

这是TPNGImage

的声明
std::forward

这个纯净的左值字符串template< class T > T&& forward( typename std::remove_reference<T>::type& t ); 如何作为"HelloWorld!"中的左值引用绑定到t

std::forward

1 个答案:

答案 0 :(得分:6)

首先,"HelloWorld!"是左值。 (const char数组)。

但是你的代码使用了重载:

template< class T >
T&& forward( typename std::remove_reference<T>::type&& t );

C字符串文字可以绑定到std::string&&,通过衰减到char const *并用于初始化临时std::string

请注意,稍后使用rstr将是未定义的行为,因为临时停止存在于语句的末尾。临时到rstr的生命周期没有生命周期延长,因为rstr绑定到xvalue,但只有当引用绑定到prvalue时才会发生扩展。