c++ - vector 类 : Difference between 4 floats, 或 4 个 float 的数组

标签 c++ game-engine

亲爱的 StackOverflowers,

我读了几本书,看到了 Vector 类的不同示例。 现在我想知道: 在性能或可移植性(或除访问之外的任何其他方面)方面是否存在差异:

class Vector
{
public:
        ....
private:
    float mTuple[4];
};

class Vector
{
public:
        ....
public:
    float x;
    float y;
    float z;
    float w;
};

我认为 Vector.x 是比 Vector.X() 更优雅的解决方案; 我知道重载运算符 [] 会稍微复杂一些, 但我认为编译器应该能够轻松地将其优化到相同的速度, Vector 类的用户不会注意到它。

大家怎么看这件事?

基督徒

最佳答案

嗯,虽然两者都是可移植的和高性能的,但它们实际上没有相同的含义。

如果您知道您的数组中始终有 4 个元素并且它们具有不同的语义(例如,3D 空间中的坐标 x、y 和 z),您的第二个解决方案可能更好,尽管允许公共(public)访问字段是不是很好的做法(并且没有更高的性能,因为您的编译器可以内联打扰琐碎的 getter 和 setter)。

如果你的 vector 可以有任何(合理的)数量的项目,显然你别无选择,只能使用 float[]float*(编辑:或者,更像 C++,std::vectorstd::array)。

关于c++ - vector 类 : Difference between 4 floats, 或 4 个 float 的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16418621/

相关文章:

c++ - 在OpenCV中匹配Matlab的regionprop(x ,'Area')

multithreading - 在传统的单线程游戏引擎(如带有OpenMP的ioquake3)上可以实现什么样的优化?

WPF<->XNA - 如何结合这两种技术?

java - LWJGL - 当我的玩家与多个墙壁物体碰撞时,他开始来回弹跳

c++ - 如何在 .pri 文件的内容前加上路径?

c++ - 什么是类内命名空间的良好替代方案?

c++ - 使用 CSplitterWindowImpl 处理移动并使子 Pane 无效

c++ - 在 C++ 中替换另一个宏中的一个宏

c# - 从 System.Type 变量创建类的实例

python - 我应该去哪里学习如何设计游戏和模拟?