早上好,
假设我有一个班级ClassA
,一个运算符+
,它汇总了两个ClassA
类型的对象,一个从int
到ClassA
的隐式投射,并且我想重载运算符++
...假设+
的代码相当长,但ClassA
和1
的总和是非常特殊的它的情况,哪个选项更好?
++
实施+
,并已定义隐式广告。1
时简化了很多。我的想法是(2)更好,因为它通过隐式转换来保存新ClassA
对象的创建,如果使用++
运算符,这可能非常有用,例如,在for
周期内。此外,速度是必须的。
非常感谢。
答案 0 :(得分:4)
你已经回答了自己的问题。如果速度是必须的,那么选择第二个更快的选项(最好对它进行基准测试,以确保它确实快得多)。
否则,请使用第一个选项,因为更少的代码更好(并且保持DRY加倍 - 所以)。更少的代码意味着更少的潜在错误,更少的维护,更少的写入和更少的阅读。如果代码很大程度上复制了另一段代码,那么你必须在进行更改时保持两者同步 - 这会引起麻烦,因为很容易忘记更新一个(即使你总是记得要做两个地方都有变化,因为它们不完全相同,可以正确更新一个部分并错误地更新另一个部分。
在做出最终决定之前,确保速度确实是必须的 - 你不想要premature optimization。
答案 1 :(得分:3)
无论哪种方式都可以接受。这听起来像你已经倾向于的第二种方式,所以试试吧。事实上,尝试两种方式并测量增加一百万次所需的时间。基准测试始终是做出这些决定的方法。
如果您之前没有进行任何基准测试,最简单的方法是创建System.Diagnostics.Stopwatch并围绕相关代码启动/停止它。然后,您可以将经过的时间写入控制台。
答案 2 :(得分:0)
我的观点是,如果+1是一个更简单的真实特例,那么执行特殊的++实现。如果您想保持代码较小,可以随时将其注释掉并将其引用到+ 1.
否则,很容易忘记这个特殊优化6个月。当你想要优化的时候。
过早优化是指您在之前优化,而不是在您有明确的理由这样做的情况下。然而,如何绘制线条很困难;你需要决定如何更多更简单的++代码,以便考虑将其放入。