C++中的重载运算符

Overload operator in C++

本文关键字:运算符 重载 C++      更新时间:2023-10-16

假设我有一个类:

class MyIntegers
{
public:
  MyIntegers(int sz); //allocate sz integers in _Data and do some expensive stuff
  ~MyIntegers();      //free array
  int* _Data;
}

还有这一小段代码:

int sz = 10;
MyIntegers a(sz), b(sz), c(sz);
for (int i=0; i<sz; i++)
{
  c._Data[i] = a._Data[i] + b._Data[i];
}

是否可以在不创建临时对象的情况下重载三元operator+以用c=a+b替换循环?

在我的情况下,重载operator=operator+=并写入c=a; c+=b;以避免创建临时对象是不可接受的。

您要查找的是表达式模板,其中基本上表达式a+b不会导致结果的计算,而是返回一个"proxy"对象,其中操作(在本例中为+)在类型中编码。通常,当您需要结果时,例如在分配给变量时,会使用在代理类型中编码的操作来进行实际计算。

使用C++11的移动赋值运算符,不太需要表达式模板来优化只有一个临时表达式的简单表达式(因为该临时表达式将移动到最终结果),但这仍然是一种避免大临时性的技术。