HJ C++11 Day6
查源码–标准库源代码分布
...\CPP_version\include\c++\bits //STL源码也在这
...\CPP_version\include\c++\ext
右值引用
该语义的发展是为了非必要的赋值操作。
下面介绍左值和右值的概念:
- 左值是可以出现在=左边的东西
- 右值是只能出现在=右边的东西(例如临时对象)
左值是指表达式结束后依然存在的持久化对象,右值是指表达式结束时就不再存在的临时对象。所有的具名变量或者对象都是左值,而右值不具名。很难得到左值和右值的真正定义,但是有一个可以区分左值和右值的便捷方法:看能不能对表达式取地址,如果能,则为左值,否则为右值。
在C++11中,右值引用的操作符为&&
,左值引用的操作符为&
在这里,右值引用更像是“偷取”,我们没有深度拷贝堆内存中的数据,而是仅仅复制了指针,并把源对象 other 的指针置空。事实上,我们“偷取”了属于源对象 other 的内存数据。由于源对象 other 是一个右值,不会再被使用,因此客户并不会觉察到源对象被改变了。
完美转发
这里感觉只听懂了一点点,这里直接放别人的博客吧