C++11右值引用

C++11右值引用

 1、什么是左值?什么是右值?

  左值是表达式结束后依然存在的对象;右值是表达式结束时就不再存在的对象。

 2、std::move的作用是什么?

  C++11右值引用

  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

你可能感兴趣的:(C++)