公共变量是否比使用getter和setter更快?

时间:2017-05-26 12:59:47

标签: c++ performance optimization

我正在为我正在制作的游戏编写自定义物理引擎,我的物理对象类有大量变量(距离,速度,加速度,质量,重力,力,脉冲持续时间等......)。为每个变量创建一个setter和getter函数会影响性能吗? (在给定时间内将至少有100个此类的实例)

我也应该创建setter和getter吗?我听说公共变量真的很糟糕,但是有很多变量,这可能是个例外吗?

3 个答案:

答案 0 :(得分:7)

  

为每个变量创建一个setter和getter函数会影响性能吗?

对于简单的getter / setter函数,它们通常可以由编译器内联,因此不会对性能产生影响。

  

我也应该创建setter和getter吗?我听说公共变量真是不好的做法

公共变量本身并不是一种不好的做法,但通常你想把你的数据封装在一个类中,特别是如果在它们上面应用了计算。

只提供getter / setter函数的类是无用的,通常可以简单地用struct代替所有公共变量。

答案 1 :(得分:5)

  

为每个变量创建一个setter和getter函数会影响性能吗? (在给定时间内将至少有100个此类的实例)

可能没有。理论上是的,但在实践中,调用额外函数来获得特定值的成本可以忽略不计。影响性能的唯一方法是,如果你最终一直在调用这些方法 (比如说......每秒50000次)。

  

我也应该创建setter和getter吗?

可能没有。良好的OO设计遵循一个名为“告诉,不要问”的指导方针。通常你应该看看你需要这些变量的操作,然后在类中实现这些操作,或者在具有访问权限的类中实现它们,或者使用不同的模型(访问者模式可以想到)。

  

我听说公共变量真的很糟糕,但是有很多变量,这可能是个例外吗?

拥有公共变量并不是一种不好的做法。当你有不变量时有公共变量是不好的做法。

例如,如果您有一个测量对象重量的变量,您需要确保无法将其设置为无效值(例如负数或非常大的数量)。如果将变量设为public,则必须检查在修改它的客户端代码中设置的值,或者放弃验证该值。

两者都不好,因为如果你有一个propper setter,那么这些错误是不可能存在的,并且有验证。

简而言之,只有在没有变量的情况下才能使用公共变量。

考虑:

  • 使用公共变量,如果设置变量类型允许的任何值都可以,在任何时候(你没有不变量)

  • 如果您有不变量,请使用私有变量。

  • 使用公共方法来定义操作,而不是“访问内部变量”。

  • 根据您从客户端代码查看时要执行的操作设计公共API,而不是根据内部实现中存在的变量来设计 EM>

在这种情况下,getter和setter有时会很有意义(很少),但不是因为你在类中有变量。

  • getter和setter是尝试在错误的地方解决问题的一种症状:如果在A类中有一个使用B类变量的操作X,那么你应该在B类中定义操作X,然后调用它来自A班。

答案 2 :(得分:0)

只是公共变量违反了OO设计原则,但getter setter却没有,这就是为什么我们需要用户总是getter和setter