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

Alw*_*ing 2 c++ constructor operator-overloading assignment-operator

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

C c;
...
c = 5;
Run Code Online (Sandbox Code Playgroud)

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

Tar*_*ama 5

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

如果operator=(int)存在:

C c; //default constructor
c = 5; //assignment from int
Run Code Online (Sandbox Code Playgroud)

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

C c; //default constructor
c = 5; //construction of temporary from int, then assignment from C
Run Code Online (Sandbox Code Playgroud)

如果移动语义有效,那么C后者可能是可以接受的。如果没有,您可能还是想定义它operator=(int)。最终,这取决于许多因素,例如您布置作业的频率C、副本的价格等。了解问题,弄清楚它们如何应用于您的课程,然后选择最合理的解决方案。