类构造函数比“ =”运算符具有更高的优先级?

时间:2019-06-18 09:17:23

标签: c++

我重载了运算符“ =”以做某事,但实际上它使用了构造函数

class Date
{public:
    int x;
public:
    Date(int v1)
    {
        x = v1+1;
    }
    Date& operator=(Date& d)
    {
        x = x - 1;
    }
public:
    ~Date() {};
};

int main()
{
    Date d = 1;
    cout << d.x;
    //delete d;
    return 0;
}

我原本希望打印0,但是打印2(使用构造函数)。这是为什么?还有为什么不让我删除d?它说它必须是指向完整对象类型的指针。

1 个答案:

答案 0 :(得分:6)

应该优先,因为这

Date d = 1;

不是赋值,它是带有初始化的对象声明。 C ++中类对象的初始化是构造函数的领域。不要让语法(使用= 1作为初始化程序)使您感到困惑。

要调用赋值运算符,左侧必须是已发生初始化的现有对象。分配仅适用于预先存在的对象。因此,如果您添加这样的语句:

d = 1;

它可以按您期望的方式调用赋值运算符(在修复了一些其他错误之后)。

  

为什么不让我删除d?它说它必须是指向完整对象类型的指针。

该错误对我来说似乎很容易解释。您只能在指针操作数上调用delete。并且指针必须指向先前使用new创建的对象。