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



我重载了运算符"="来做某事,但它反而使用构造函数

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?它说它必须是指向完整对象类型的指针。

它应该得到优先级,因为这

Date d = 1;

不是赋值,而是带有初始化的对象声明。C++ 中类对象的初始化是构造函数的域。不要让语法(使用 = 1 作为初始值设定项(混淆您。

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

d = 1;

它可以按预期调用赋值运算符(在修复其他一些错误之后(。

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

这个错误对我来说似乎是不言自明的。只能在指针操作数上调用 delete。并且指针必须指向以前使用 new 创建的对象。

最新更新