繁体   English   中英

分配运算符重载

[英]Assignment operator overload

我有分配给string运算符的类。

class turbo
    {
public:
    operator string   (void) {printf("assignment to string operator\n");return "bla2";}
    };

分配操作可以正常工作:

turbo t;
string s;
s=t;

而且我在输出中有"assignment to string operator"的信息。

然后我决定让另一个赋值运算符来turbo

class turbo
    {
public:
    operator string   (void) {printf("assignment to string operator\n");return "bla";}
    operator turbo   (void) {printf("assignment to turbo operator\n");return *this;}
    };

但是下面的代码不会调用turbo赋值运算符。

turbo t;
turbo tt ;
tt=t;

为什么?

我知道我可以重载=运算符,但我也希望运算符能turbo工作,因为string一正在运行。

您不是在重载赋值运算符,而是在转换运算符。 因此,它们在转换发生时被调用。

参见c ++:强制转换运算符与分配运算符与转换构造函数优先级

类的隐式声明的副本分配运算符采用类型X const& (此处为turbo const& )的单个参数。 由于您的RHS操作数已经是turbo类型的,因此无需调用转换函数。

实际上,永远不会隐式调用到相同类型的转换函数。 它只能被显式调用(如turbo::operator turbo() ),也可以通过基类中的虚拟转换函数来调用。 这在[class.conv.fct]中进行了讨论:

1-从未使用转换函数将(可能具有cv限定)对象转换为(可能具有cv限定)相同对象类型(或对其的引用),转换为(可能具有cv限定)该类型的基本类(或对其的引用),或无效的(可能经过cv限定)。 [...]

请参阅在什么情况下将调用类型的转换操作符?

暂无
暂无

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

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