关于拷贝函数和赋值运算符函数的问题
假设A是一个类类型Aa;Ab=a;//为什么这里调用的是拷贝函数,而不是赋值运算符函数?和这样写Ab(a);有什么区别?高手解释,谢谢!...
假设A是一个类类型
A a;
A b=a;//为什么这里调用的是拷贝函数,而不是赋值运算符函数?
和这样写A b(a);有什么区别?
高手解释,谢谢! 展开
A a;
A b=a;//为什么这里调用的是拷贝函数,而不是赋值运算符函数?
和这样写A b(a);有什么区别?
高手解释,谢谢! 展开
2个回答
展开全部
如果你定义了赋值预算,则调用的是赋值运算函数,如果没有定义,则调用拷贝函数
还有一点,如果重载操作符= 为A& operator = (const A& a)参数设为引用,就不会调用拷贝构造函数,如果定义重载操作符= 为A& operator = (const A a)就会调用拷贝构造函数,具体要看你怎样重载。如果你在类声明中没有定义拷贝构造函数和赋值运算符,编译器会给你加上默认的拷贝构造函数和赋值运算符,这时候你调用哪个就是哪个喽
还有一点,如果重载操作符= 为A& operator = (const A& a)参数设为引用,就不会调用拷贝构造函数,如果定义重载操作符= 为A& operator = (const A a)就会调用拷贝构造函数,具体要看你怎样重载。如果你在类声明中没有定义拷贝构造函数和赋值运算符,编译器会给你加上默认的拷贝构造函数和赋值运算符,这时候你调用哪个就是哪个喽
追问
两个函数都定义
A b=a;//调用拷贝构造函数
定义了赋值运算符函数,没定义拷贝构造函数
A b=a;//还是调用编译器提供的默认拷贝构造函数,没有调用定义的赋值运算符函数,为什么
你没回答到点子上啊
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询