gpt4 book ai didi

c++ - 为什么方法应该返回一个新实例,而不是修改实例本身?

转载 作者:太空狗 更新时间:2023-10-29 20:10:12 24 4
gpt4 key购买 nike

假设我有一个 Vector3 类,它包含一个 normalize() 方法。该方法应该返回一个新的 Vector3,还是修改调用它的 Vector3 实例(因此返回对自身 (Vector3&) 的引用?)在哪些情况下,一个人会比另一个人更受欢迎?性能怎么样?

最佳答案

答案取决于您的类(class)设计。

对于可变类,rotate 应该旋转 vector 本身。这被认为更有效,并且在大型对象的情况下,当 vector 中有很多项目时,它可以让您避免复制大量数据。

另一方面,不可变类必须只返回新对象,因为它们不能自己改变。这增加了一些开销,但它有很多优点,尤其是当必须同时使用对象时。

一个常见的命名约定是使用动词来进行变异操作,如

myVector.rotate(angle);
myVector.scale(factor);

虽然返回新对象的操作应该用 past participles 命名,如

auto newVector = myVector.rotated(angle).scaled(factor);

关于c++ - 为什么方法应该返回一个新实例,而不是修改实例本身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41087637/

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