公共变量是否比使用 getter 和 setter 更快?
Are public variables faster than using getters and setters?
我正在为我正在制作的游戏编写一个自定义物理引擎,我的物理对象类有大量变量(距离、速度、加速度、质量、重力、力、脉冲持续时间等)。为每个变量创建二传手和吸气函数会影响性能吗? (在给定时间将至少有 100 个此类实例)
我还应该创建二传手和吸盘手吗?我听说公共变量是非常糟糕的做法,但有很多变量,这可以是一个例外吗?
为每个变量创建一个 setter 和 getter 函数会影响性能吗?(在给定时间将至少有 100 个此类实例)
应该不会。理论上是的,但在实践中,调用额外函数以获取特定值的成本可以忽略不计。它影响性能的唯一方法是,如果您最终一直调用这些方法(例如......每秒 50000 次)。
我还应该创建二传手和吸盘手吗?
应该不会。好的OO设计遵循一个叫做"告诉,不要问"的准则。通常,您应该查看需要这些变量的操作,然后在类中实现这些操作,或者在具有访问权限的类中实现它们,或使用其他模型(想到访问者模式)。
我听说公共变量是非常糟糕的做法,但有很多变量,这可以是一个例外吗?
拥有公共变量并不是坏做法。当你有不变量时,有公共变量是一种不好的做法。
例如,如果您有一个测量对象重量的变量,则需要确保它不能设置为无效值(例如负量或大得离谱的金额)。如果将变量设为公共变量,则必须检查在客户端代码中修改它的任何位置设置的值,或者放弃验证该值。
两者都很糟糕,因为它们是错误,如果你有一个带有验证的 propper setter,它们就不会存在。
简而言之,只有当你没有不变量时,才可以接受公共变量。
考虑:
如果设置变量类型允许的任何值都可以,则在任何时候使用公共变量(您没有不变量)
如果您有不变量,请使用私有变量。
使用公共方法来定义操作,而不是"访问内部变量"。
根据从客户端代码查看公共 API 时要执行的操作来设计公共 API,而不是根据内部实现中存在的变量。
在这种情况下,getter 和 setter 有时(很少)有意义,但并不是因为你在类中有变量。
- getter 和 setter 是试图在错误的地方解决问题的症状:如果你在类 A 中有一个使用类 B 中的变量的操作 X,那么你可能应该在类 B 中定义操作 X,然后从类 A 调用它。
为每个变量创建一个二传手和getter函数会影响性能吗?
至于简单的getter/setter函数,它们通常可以由编译器内联,因此不会对性能产生影响。
我还应该创建二传手和吸盘手吗?我听说公共变量真的很糟糕的做法
公共变量本身并不是一个不好的做法,尽管通常您希望将数据封装在类中,尤其是在对它们应用了计算的情况下。
仅提供 getter/setter 函数的类是无用的,这些类通常可以简单地替换为具有所有公共变量的struct
。
简单的公共变量违反了OO设计原则,但getter setter没有,这就是为什么我们需要用户总是getter和setter
- 如何为 C 型字符串数组编写 getter 和 setter?
- 有没有办法在没有括号的情况下在C++中调用成员的getter/setter?
- Boost python getter/setter with the same name
- 如何为数组成员变量声明 getter/setter
- 具有多行字符串宏观的Getter/Setter生成
- 专用对象"getter setter"特定对象
- 具有相同名称的Getter/Setter
- C++ 中 getter setter 和构造函数之间的视觉差异
- C++中的getter/setter是正确的方法
- 绑定C++成员变量:getter/setter 或原始指针
- C++getter/setter、互斥、细粒度锁定
- Getter & Setter 的最佳性能
- 如何在公共 API 接口类中将 auto getter&setter 与 PIMPL 设计模式相结合
- 混合getter /setter和普通变量
- 如何重构冗余的getter/setter方法
- 如何在托管c++中使用手写的getter/setter定义属性
- C++ getter/setter paradigm
- C++ Getter/Setter (Alternatives?)
- 使用值包装器和 operator() 重载来简化 getter/setter 设计:这是一种危险的做法
- c++中堆对象getter / setter的更好实践