gpt4 book ai didi

代理类的 C++ 优势

转载 作者:行者123 更新时间:2023-11-28 04:54:15 28 4
gpt4 key购买 nike

Scott Meyers 在“Effective Modern C++”中说表达式

Matrix sum = m1 + m2 + m3 + m4

(其中所有对象的类型均为 Matrix)“如果 operator+ 对象的 Matrix 返回结果的代理而不是结果本身,则可以更有效地计算。也就是说,两个 operator+ 对象的 Matrix 将返回代理对象类,例如 Sum<Matrix, Matrix> 而不是 Matrix 对象。这将对整个初始化表达式进行编码,即,类似于 Sum<Sum<Sum<Matrix, Matrix>, Matrix>, Matrix>。”。

现在,我明白代理类会模仿其他一些类的行为并进行隐式转换,但是在这种情况下代理方法如何以及为什么更有效?

最好的问候

最佳答案

考虑到 Matrix 可能是任意大小的矩阵,因此它必须从堆中为其元素分配存储空间。将两个矩阵相加意味着分配存储空间并进行元素复制。

在上面的表达式中,这意味着为 (m1 + m2) 分配存储空间,将其结果添加到 m3,第三次将其添加到 m4。 (移动语义可以降低这种成本。)

如果加法返回一个仅表示加法的代理,同时持有对加在一起的事物的引用,则您只需为最终分配分配一次。

随着更多的幕后工作,可能会变得更加懒惰,只按需计算结果矩阵中需要的那些元素。

但是,这些事情总是需要权衡的,您需要评估每种情况下的成本和 yield 。

关于代理类的 C++ 优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47535652/

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