1.=default 显式要求编译器生成合成版本;=delete 定义为删除的函数阻止拷贝。
2.右值引用只能绑定到将要销毁的对象;std::move 获得绑定到左值上的右值引用
移动构造函数的第一个参数应该是该类型的右值引用,移动操作不应抛出异常,可以指明noexcept承诺。标准库容器能对异常发生时其自身行为提供保障。例如,vector的push_back可能需要移动元素。当vector知道元素的移动构造函数不会抛出异常,就可以使用。否则只能使用拷贝构造函数。
当一个类同时有拷贝和移动构造函数,编译器使用普通的函数匹配规则,移动右值,拷贝左值;当只有拷贝构造函数,则通过拷贝构造函数来“移动”
make_move_iterator将普通迭代器转换成移动迭代器,移动迭代器解引用生成右值引用
有时我们希望强制左侧运算对象是个左值,可以在成员函数参数列表后放置一个引用限定符&或&&;引用限定符也可以区分重载版本;如果定义两个或以上相同名字和参数列表的成员函数,就必须所有函数都加引用限定符,或都不加