右值引用,移动语义和完美转发

书常读常新。今天重学右值引用,移动语义和完美转发又有了新的认识,现总结如下:
1.区分右值和左值的简单方法:看能不能对表达式取地址,如果能就是左值,不能即为右值。右值的特点是不具名,不能通过名称找到它,只能通过引用的方式找到。
2.右值引用的作用是,延长右值的生命周期,右值的生命周期将和右值引用一样,只要右值引用变量还存活,该右值临时量将一直存活下去。我们可以使用这一特性做一些性能优化,例如移动拷贝构造函数和移动赋值构造函数,能避免临时对象的拷贝和析构。
3.常量左值引用是一个“万能”引用类型,可以接受左值、右值、常量左值和常量右值。(普通左值引用不能接受右值)
4.T&&并不一定表示右值,它绑定的类型是未定的,既可能是左值又可能是右值----只有当发生自动类型推断时(如函数模板的类型自动推导,或auto关键字),&&才是一个为未定的
5.编译器会将已命名的右值引用视为左值,而将未命名的右值引用视为右值。
6.std::move用来将左值转换为右值。move语义的目的是直接使用临时对象申请的资源,即节省资源又能解决申请和释放资源的时间。(move对于含资源的对象来说更有意义)
7.完美转发是指在函数模板中,完全依照模板的参数类型,将参数传递给函数模板中调用的另一个函数。

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