复制赋值运算符:返回引用与值
在 C 中,复制赋值运算符通常不会返回新对象的副本,而是相反,返回一个引用或一个 const 引用。为什么这是首选方法?
通过引用返回的基本原理
首先,通过引用返回可以最大限度地减少与赋值相关的计算开销。它只需将值从一个对象复制到另一个对象,避免创建和销毁临时对象。在处理复杂或大型对象时,这尤其有用,因为构造和删除副本可能会占用大量资源。
按值返回的后果
另一方面,如果复制赋值运算符按值返回,它会为每个值触发以下序列赋值:
对于链中的每个赋值,都会重复此序列,导致过多的构造函数和析构函数调用。考虑以下场景:
A a1(param); A a2 = a1; A a3; a3 = a2; // Line in question
如果operator=按值返回,则需要两次构造函数和析构函数调用来对a2和a3进行赋值,而按引用返回则避免了这种开销。
其他注意事项
通过引用返回还允许赋值运算符返回左值,允许进一步修改指定的对象。相反,按值返回会产生右值,无法直接修改该右值。
结论
虽然按引用返回是 C 中复制赋值运算符的标准做法,在决定合适的返回类型时,权衡具体的上下文和要求非常重要。然而,对于大多数涉及效率和对象管理的场景,返回引用仍然是首选。
以上是为什么 C 复制赋值运算符通常返回引用而不是值?的详细内容。更多信息请关注PHP中文网其他相关文章!