[英]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
一正在运行。
您不是在重载赋值运算符,而是在转换运算符。 因此,它们在转换发生时被调用。
类的隐式声明的副本分配运算符采用类型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.