右值引用
"右值"没有严谨的定义, 通常来说, 出现在等号右边的内容就是右值, 可以取地址, 有名字的就是左值
不跟对象关联的字面值等称为纯右值, 其他右值称为将亡值
右值引用是为了优化对临时对象进行深拷贝的效率...但注意右值引用不能被绑定到左值
右值引用能够延长右值的声明周期, 常量左值引用属于万能引用, 也能够延迟生命周期, 但是常量左值引用后的值不能修改所以一般用来减少临时对象的开销而已
当类没有定义移动构造时..., 如果定义了常量左值引用构造也能正确执行, 只不过会变为拷贝形式
常量右值引用存在但是没有实际用途
std::move()能强制使一个左值变为右值, 但是不会改变其生命周期
右值引用本身是个左值,..., 因此应该用noexcept修饰移动构造函数
move也有std::move_if_noexcept的版本, 其在当前函数没有noexcept时主动转换为左值应用从而调用拷贝构造版本....如果目标是被重载的函数则编译错误
否则, 对于带括号的表达式, 如果目标是将亡值, 那么返回右值引用
对于带括号的表达式, 如果目标是左值, 返回左值引用
否则返回目标本身类型
推导四规则中最麻烦的是规则