我是 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/