gpt4 book ai didi

c++ - 重载赋值运算符与提供隐式构造函数

转载 作者:行者123 更新时间:2023-11-30 01:13:42 25 4
gpt4 key购买 nike

我刚刚在 C++ Primer(第 5 版)的第 563 页了解到可以重载赋值运算符。因此,如果我正在编写一个类 C 并且将整数分配给此类的对象是有意义的,那么我可以为赋值运算符提供一个类型为 rhs 的赋值运算符整数。然后我类的客户可以写:

C c;
...
c = 5;

问题: 如果这样的赋值有意义,那么隐式构造函数 C(int); 是否也应该有意义?如果是这样,那么我真的应该定义这个构造函数(它也有其他用途)并且永远不需要重载赋值运算符。我错过了什么吗?

最佳答案

如果 C 定义了一个采用 int 的非显式 构造函数,那么您不一定需要赋值运算符采用 int,但最终可能会更高效。

如果 operator=(int) 存在:

C c; //default constructor
c = 5; //assignment from int

如果 C(int) 存在而 operator=(int) 不存在:

C c; //default constructor
c = 5; //construction of temporary from int, then assignment from C

如果移动语义对于 C 是有效的,那么后者可能是可以接受的。如果不是,您可能仍要定义 operator=(int)。最终,这取决于许多因素,例如您分配给 C 的频率、拷贝的价格等。了解问题,找出它们如何应用于您的类(class),然后选择最合理的解决方案。

关于c++ - 重载赋值运算符与提供隐式构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31607078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com