#include <iostream>
class A{
};
class B: public A{
public:
B(A&& inA){
std::cout<<"constructor"<<std::endl;
}
};
int main(){
B whatever{A{}};
whatever=A{};
}
此输出
constructor
constructor
至少使用C ++ 14标准和GCC。如何定义赋值运算符可以导致调用构造函数而不是operator=
?赋值运算符的这个属性是否有名称?
答案 0 :(得分:3)
因为你遇到了所有的conditions for generating a move-assignment operator。编译器为您合成的移动赋值运算符的形式为:
B& operator=(B&&) = default;
回想一下,临时工具可以绑定到 const
左值引用和右值引用。在Implicit Conversion Sequences之后,您的临时A{}
将转换为临时B
,用于进行移动分配。您可以使用explicit
构造函数禁用此功能。