gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 00:43:07 25 4
gpt4 key购买 nike

我重载了运算符“=”来做某事,但它却使用了构造函数

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;

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

Also why won't it let me delete d? it says it must be a pointer to a complete object type.

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

关于c++ - 类构造函数比 "="运算符有更高的优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56645705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com