Rai*_*ers 4 c++ optimization performance
我正在为我正在制作的游戏编写一个自定义物理引擎,我的物理对象类有很多变量(距离,速度,加速度,质量,重力,力,脉冲持续时间等......).为每个变量创建一个setter和getter函数会影响性能吗?(在给定时间内将至少有100个此类的实例)
我也应该创建setter和getter吗?我听说公共变量真的很糟糕,但是有很多变量,这可能是个例外吗?
为每个变量创建一个setter和getter函数会影响性能吗?
对于简单的getter/setter函数,它们通常可以由编译器内联,因此不会对性能产生影响.
我也应该创建setter和getter吗?我听说公共变量真的很糟糕
公共变量本身并不是一种不好的做法,尽管通常您希望将数据封装在一个类中,特别是如果在它们上应用了计算.
仅提供getter/setter函数的类是无用的,这些类通常可以简单地替换为struct包含所有公共变量的类.
为每个变量创建一个setter和getter函数会影响性能吗?(在给定时间内将至少有100个此类的实例)
可能没有.理论上是的,但实际上,调用额外函数来获得特定值的成本可以忽略不计.它会影响性能的唯一方法是,如果你最终调用这些方法所有的时间(比方说......每秒50000次).
我也应该创建setter和getter吗?
可能没有.良好的OO设计遵循一个名为"告诉,不要问"的指导方针.通常你应该看看你需要这些变量的操作,然后在类中实现这些操作,或者在具有访问权限的类中实现它们,或者使用不同的模型(访问者模式会想到).
我听说公共变量真的很糟糕,但是有很多变量,这可能是个例外吗?
拥有公共变量并不是不好的做法.当你有不变量时有公共变量是不好的做法.
例如,如果您有一个测量对象重量的变量,您将需要确保无法将其设置为无效值(例如负数或非常大的数量).如果将变量设置为public,则必须检查在修改它的客户端代码中设置的值,或者放弃验证该值.
两者都很糟糕,因为如果你有一个propper setter并且有验证,它们就是不存在的错误.
简而言之,只有在没有变量的情况下才能使用公共变量.
注意事项:
使用公共变量,如果设置变量类型允许的任何值都可以,在任何时候(你没有不变量)
如果你有不变量,请使用私有变量.
使用公共方法来定义操作,而不是"访问内部变量".
根据您在客户端代码中查看时要执行的操作来设计公共API ,而不是根据内部实现中存在的变量.
在这种情况下,getter和setter在某些时候(很少)是有意义的,但不是因为你在类中有变量.