gpt4 book ai didi

c++ - 为什么我可以在不重载 "="运算符的情况下将一个对象分配给另一个对象?

转载 作者:行者123 更新时间:2023-12-01 23:56:45 25 4
gpt4 key购买 nike

我是 C++ 新手,刚刚了解重载运算符。我很困惑,因为似乎我可以将一个对象分配给另一个对象而不必重载“=”运算符。以此代码为例:

class process
{
int size;

public:
process(int s)
{
size = s;
}
~process();

int getSize()
{
return size;
}

};

int main()
{
process p1(2);
process p2(3);
p1 = p2;
std::cout << p1.getSize() << "\n";
}

输出是:

3

如您所见,进程类“p2”中的信息已复制到“p1”,但我没有重载“=”运算符。为什么会这样?有什么地方可以让我了解一些关于 C++ 为实现这一目标所做的具体信息吗?谢谢。

最佳答案

Why can I assign one object to another without overloading the “=” operator?

因为类有一个隐式生成的复制(和移动)赋值运算符。

Is there any place where I can have some concrete info about what C++ did for this to happen?

信息的权威来源是标准文档。

Books也有关于 C++ 的文章。


But then why would I want to overload the "=" operator?

没有理由要重载示例类的赋值运算符。

一般来说,你可能想要重载,因为

  • 编译器生成的赋值运算符不能读懂你的想法,也不能做你想让它做的事。它只做一件事,如果那不是你想要的,那么你需要定义你自己的。如果您遵循最佳实践,那么隐式生成的赋值运算符通常会执行您想要的操作。

  • 有时您可能希望能够分配其他类型。

  • 有时会删除隐式生成的运算符,例如当存在不可分配的成员时。在这种情况下,如果您知道运算符(operator)应该做什么,您可以定义自己的。


附言编译器还隐式生成析构函数。您不需要为您的类定义析构函数。

关于c++ - 为什么我可以在不重载 "="运算符的情况下将一个对象分配给另一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62669166/

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