
正文
C++11右值引用
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
【 C++11右值引用 】
1、什么是左值?什么是右值?
左值是表达式结束后依然存在的对象;右值是表达式结束时就不再存在的对象。
2、std::move的作用是什么?
std::move用于把任意类型 转化为右值引用 ,以方便调用move构造函数/move赋值函数。
std::forward的作用是什么?把左值引用还原为左值,把右值引用还原为右值,即把尽可能把值变变右值。
3、四大类型
1)non-const lvalue
2)const lvalue
3)non-const rvalue
4)const rvalue
4、为什么non-const lvalue只能绑定到本类对象?
首先因为const的限制non-const只能绑定到non-const,因此排除(2)、(4),再者如果绑定到non-const rvalue,则有可能导致在后续修改rvalue,这显然有巨大风险。
5、为什么non-const rvalue只能绑定到本类对象?
如果允许绑定到non-const lvalue,则有可能导致数据被窃取;如果绑定到const rvalue,const lvalue则有可能修改原数据。
6、template<typename T >
void f(T && t){ g(t); }
我们规定:
如果实参类型为右值,那么 T&& 就被推导为右值引用。
如果实参类型为左值,那么 T&& 就被推导为左值引用。
7、有了右值引用后,需要添加以下类成员函数:
1)右值引用构造函数。
2)右值引用拷贝构造函数。
参考:
1、http://www.cnblogs.com/hujian/archive/2012/02/13/2348621.html
2、http://blog.csdn.net/pongba/article/details/1697636






