首页 > 编程语言 > 详细

调用构造函数还是等号重载? C++

时间:2021-04-06 14:41:27      阅读:25      评论:0      收藏:0      [点我收藏+]

假设我想让一个float赋值给 含有两个成员变量的Complex对象

1 class Complex {
2 private:
3     float a,b;
4 };

在执行这样的赋值时,什么情况下使用operator=,什么情况使用类型转换构造函数呢?

 

case 1:

初始化的时候使用构造函数。

Complex c = 2.2f;

 

 case 2:

赋值时,优先使用operator=重载;

1 Complex c;
2 c = 2.2f;

 

case 3:

赋值时,如果没有=重载,会调用类型转换构造函数生成一个临时对象,使用这个临时对象进行赋值。

这时赋值也是优先使用operator=重载。如果没有相应重载,编译器会安排对象中的变量挨个进行赋值。

 

!注意,如果在类型转换构造函数前加上 explicit 关键字,则不会进行上述类型转换(也叫做隐式转换)生成临时对象。

!注意,临时对象在使用时有可能会作为参数传入某个函数(如上面的情况,作为参数传入构造函数 / operator=),所以在写函数参数时要考虑这种情况,使用const引用或者右值引用避免报错。

 

调用构造函数还是等号重载? C++

原文:https://www.cnblogs.com/harrypotterisdead/p/14621398.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!