首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我可以在不重载"=“操作符的情况下将一个对象分配给另一个对象?

为什么我可以在不重载"=“操作符的情况下将一个对象分配给另一个对象?
EN

Stack Overflow用户
提问于 2020-07-01 03:21:19
回答 1查看 202关注 0票数 2

我是C++的新手,我刚刚学到了重载操作符。我很困惑,因为我似乎可以将一个对象分配给另一个对象,而不必重载"=“操作符。以下面的代码为例:

代码语言:javascript
运行
复制
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

如您所见,process类"p2“中的信息被复制到"p1”中,但我还没有重载"=“操作符。为什么会发生这种情况?有什么地方我可以得到一些具体的信息,关于C++为这种情况做了什么?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-01 03:25:26

为什么我可以在不重载“=”操作符的情况下将一个对象分配给另一个对象?

因为类具有隐式生成的副本(和移动)赋值运算符。

,有什么地方可以让我知道C++是怎么做到的呢?

授权信息来源是标准文件。

Books也写过关于C++的文章。

,但是为什么我要重载"=“操作符呢?

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

一般来说,您可能想要超载,因为

编译器生成的赋值操作符

  • 不能读取您的头脑,无法执行您希望它做的事情。它只做一件事,如果这不是你想要的,那么你需要定义你自己的。如果您遵循最佳实践,那么通常情况下,隐式生成的赋值运算符会做您想做的事情。

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

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

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62669166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档