C++ operator oveload

C++ operator oveload

本文关键字:oveload operator C++      更新时间:2023-10-16

>我有以下类声明:

Class A
{
    A &operator =(const ACHAR *s); // (1)
    A &operator =(A &a);           // (2)
    A operator +(const ACHAR *s);  // (3)
    operator ACHAR*();             // (4)
};

现在,当我运行此代码时:

A x,y;
ACHAR *p;
x=y; // (2)
x=y+p; (3)(4)(1)

第一个赋值 x=y 调用 (2( 运算符 =,正如预期的那样。

但是第二个赋值会引发强制转换运算符,而 (1( 运算符=。

现在,由于 (3( 运算符 + 返回类 A,我希望调用 (2( 运算符 =。

为什么会发生这种情况,以及如何解决*这个问题?

提前感谢!

A& operator=(A& a);

它应该是:

A& operator=(const A &a);
             ^^^^^            

在你的情况下,y + p产生一个 A 类型的右值,不能被非常量引用A&捕获,所以调用 4 和 1 而不是 2。