移动构造函数的声明、弃置及重载决议
本文为观看b站up主happyyang的百草园的视频C++移动构造函数的声明、弃置及重载决议以及查阅cppreference后所做笔记。
Move构造函数的4种状态
-
隐式声明
-
(隐式)弃置的移动构造函数。(会弃置合成的移动构造函数和
=default
显式预置的移动构造函数)需要注意:这个隐式弃置的移动构造函数会被重载决议忽略,也就是说调用
A b = std::move(a)
不会报错,会退而求其次去匹配接受const
引用的拷贝构造函数。如上图种所说“否则它会阻止从右值复制(拷贝)初始化”。 -
声明
-
弃置
显式
=delete
的移动构造函数会参与重载决议,也就是说调用A b = std::move(a)
是会报错的,匹配到这个函数后发现这个函数是删除的,发生错误。
重载决议
A a;
A b = std::move(a);
- 如果已经显式声明了一个移动构造函数或者存在合成的移动构造函数,则调用这个移动构造函数。
- 如果移动构造函数被显式
delete
了,会报错。 - 如果存在接受
const
引用的拷贝构造函数,则调用这个拷贝构造函数。 - 报错。
`引用的拷贝构造函数,则调用这个拷贝构造函数。
4. 报错。