我不知道这是否是预期的行为(如果是,抱歉,请关闭此问题),但这显然不应该被允许!
让我们说,
1) 我希望变量foo
默认值为 1,
2)当用户以某种方式交互时它会改变它的值(让我们说输入)。
3)用户完成后, foo
的值必须再次为1。
这里发生的事情是,与setget
关联的函数在值已经为 1 时每次设置为 1 时都会调用,当原始值不同时应该调用一次(第一次)。 这对我来说有点扼杀了性能,我知道我可以做到这一点:
if (new_value == old_value):
return
但这应该是自动完成的。
我认为自动执行此操作不是一个好主意。 设置一个与它已有的值相同的变量不应该影响性能,这是你的setget
函数应该在需要时处理的事情。 此外,添加值检查 _will_ 会影响性能,因为它是一种新的(概念上不需要的)分支。
我也不认为我们可以假设设置相同的值不会对 setter 产生影响,因此可以绕过它。
如果每次设置一个值都可以使性能受到影响,那么这看起来您有一个非常复杂的设置器。
好吧,通常情况下,当您只进行自我分配时,这不会有问题,但是如果您做的工作比分配新值更多,例如“setget”的全部意义,则会损害性能。 特别是如果该值保持不变并且每帧都自我分配。
此外,所有 C++ 编译器(我所知道的)都会保护您免受此类暴行的侵害。 (至少对于基本类型,重载赋值运算符会使这种保护失效)事实上,我已经看到一些代码断言检查该值以查看在 amd cpu 上的浮点数自赋值后值是否保持不变。 这是作为某个项目的健全性检查完成的,我忘记了它的名字。
在我看来,当有一个简单的解决方法时,不值得破坏旧代码(我有代码利用 setter 向用户显示相同值分配尝试的通知)。
最有用的评论
在我看来,当有一个简单的解决方法时,不值得破坏旧代码(我有代码利用 setter 向用户显示相同值分配尝试的通知)。