c++ - 设计一个 Vector3D 类

标签 c++ class

当我们想要创建一个新的 vector 3D 类时,我不知道哪个是最佳实践,我的意思是,这两个示例中哪个是最好的方法?

class Vec3D
{
   private:

         float m_fX;
         float m_fY;
         float m_fZ;

...
};

class Vec3D
{
   private:

         float m_vVec[3];
...
};

对于第一种方法,我们有单独的变量,我们不能确保在内存中是连续的,因此缓存可能会失败,但访问这些变量是一条指令。

使用第二种方法,我们在内存中有一个由 3 个连续 float 组成的 vector ,缓存在这里很好,但每次访问都会产生额外的变量偏移量。但我认为这种 vector 方法可以更好地适应 SSE2/3 之类的优化。

哪种方法更好,我迷路了,我需要建议:)

感谢您的宝贵时间:)

洛伦斯

最佳答案

使用

class Vec3D
{
   private:
    union 
    {
        float m_vVec[3];
        struct
        {
             float m_fX;
             float m_fY;
             float m_fZ;
        };
    };
    ...
}

这会让你们两个都不需要额外的费用

关于c++ - 设计一个 Vector3D 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1467449/

相关文章:

java - Java 中的每个构造函数都隐式调用 Object 的构造函数吗?

c++ - 在 C/C++ 中为什么 do while(expression);需要半冒号吗?

c++ - 访问另一个结构中的结构字段

c++ - Coverity 静态分析说 Unsigned Int 是 Char (C++)

c++ - 为什么复制构造函数在C++中直接使用私有(private)属性

php - 未定义字体 : In Fpdf. 如果我设置函数 __construct

css - asp.net mvc3 intellisense 不会为 css 类触发

ruby - 如何检查类是否已定义?

c++ - 将 RegEx 子匹配分配给变量或映射 (C++/C)

c++ - Boost DFS如何保存访问过的顶点?