繁体   English   中英

赋值运算符和用户定义的构造函数之间的关系

[英]Relationship between assignment operator and user-defined constructor

#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= 赋值运算符的此属性是否有名称?

由于您满足生成移动分配运算符的所有条件 编译器为您合成的移动分配运算符的形式为:

B& operator=(B&&) = default;

回想一下,可以将临时变量绑定到const左值引用右值引用 通过隐式转换序列 ,您的临时A{}被转换为临时B ,用于进行移动分配。 您可以使用explicit构造函数禁用此功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM