首页 > 后端开发 > C++ > 为什么 C 复制赋值运算符返回引用而不是副本?

为什么 C 复制赋值运算符返回引用而不是副本?

Linda Hamilton
发布: 2024-12-21 04:15:09
原创
450 人浏览过

Why Do C   Copy Assignment Operators Return References Instead of Copies?

复制赋值运算符中引用/常量引用返回的必要性

C 中的复制赋值运算符引发了有关其返回类型的问题。为什么它返回一个引用或一个常量引用而不是新对象的副本?为了阐明这个概念,请考虑以下场景:

A a1(param);
A a2 = a1;
A a3;

a3 = a2; // The problematic line
登录后复制

假设复制赋值运算符定义如下:

A A::operator=(const A& a)
{
    if (this == &a)
    {
        return *this;
    }
    param = a.param;
    return *this;
}
登录后复制

从复制赋值运算符返回引用具有显着的优点关于归还副本。通过返回引用,它可以完成最少的工作,因为它仅将值从一个对象复制到另一个对象。

但是,按值返回会产生额外的开销。每次调用赋值运算符时,都会调用构造函数和析构函数,导致不必要的资源消耗。例如:

A& operator=(const A& rhs) { /* ... */ };

a = b = c; // Calls assignment operator twice. Efficient.
登录后复制

相反:

A operator=(const A& rhs) { /* ... */ };

a = b = c; // Calls assignment operator twice, calls copy constructor twice, calls destructor twice for temporary values. Inefficient.
登录后复制

因此,从复制赋值运算符返回引用或 const 引用可以通过避免不必要的对象创建和销毁来优化性能,从而提高效率和代码可维护性。

以上是为什么 C 复制赋值运算符返回引用而不是副本?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板