吸气剂和二传手。有性能开销吗?

新手上路,请多包涵

我的 C++ 项目中有一个粒子系统引擎,粒子本身只是没有函数的变量结构。目前,每个粒子 (Particle) 通过直接访问其变量从其父类 (ParticleSystem) 更新。例如

particle.x += particle.vx;

然而,我正在辩论使用这样的 getter 和 setter:

particle.setX( particle.getX()+particle.getVX() );

我的问题是: 调用 getter 和 setter 是否有任何性能开销,而不是直接访问数据?

毕竟,我确实有很多粒子要更新…

原文由 sgtHale 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 402
2 个回答

Setter 和 getter 在未优化时会产生性能开销。 它们几乎总是在进行链接时间优化的编译器上进行优化。而在没有的编译器上,如果他们了解函数体(即不仅仅是原型),它将被优化掉。只需查找 内联优化

但是,您使用 getter 和 setter 是因为您可能希望获取或设置该变量以产生额外的副作用。就像改变物体的位置一样,也会改变附近物体在物理模拟等中的位置。

最后,在优化代码的上下文中,getter 和 setter 操作的开销非常小,除非代码很热,否则不值得担心。如果它很热,只需将 getter 或 setter 移动到头文件并内联它就很容易了。

然而,在长期运行的科学模拟中,它可以加起来——但它需要数百万次调用。

总而言之,getter 和 setter 非常值得少量或不存在的开销,因为它允许您非常具体地指定对象可以和不可以发生的事情,并且还允许您编组任何更改。

原文由 OmnipotentEntity 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果 getter 和 setter 被证明是稍微复杂一点的任务,那么 getter 和 setter 可以让你的代码在未来更容易地发展。大多数 C++ 编译器都足够聪明,可以 内联 那些简单的方法并消除函数调用的开销。

原文由 Reuben Morais 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题