gpt4 book ai didi

c++ - C++ 中的重载运算符

转载 作者:太空宇宙 更新时间:2023-11-04 11:51:01 26 4
gpt4 key购买 nike

假设我有一个类:

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; 避免创建临时对象在我的情况下是 Not Acceptable 。

最佳答案

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

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

关于c++ - C++ 中的重载运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18229768/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com