c – 简单的if是否有任何性能降低?

例如,我有一个班级

class Point
{
public:
    float operator[](int i) const
    {
       if (i == 0) return m_x; // simple ifs, performance reduction??
       if (i == 1) return m_y;
       return m_z;
    }

private:
    float m_x;
    float m_y;
    float m_z;
};

与访问std :: array< float,3>的元素相比,是否有性能降低?如果是这样,我该如何删除它.我想使用除数组之外的字段x,y,z.

最佳答案

Is there any performance reduction?

我假设你的意思是“与进行数组查找相比”.

如果是这样,答案是(可能)是 – 任何分支操作都可能导致管道停滞(如果CPU错误预测将采取哪个分支),这可能会使事情变慢. CPU分支预测现在相当不错,所以它在现实生活中可能不是问题 – 它将在很大程度上取决于调用此代码的程序的使用模式.

If so, how can I remove it. I want to use fields x, y, z other than
an array.

您可以使用三项数组而不是三个单独的项来删除ifs.

如果您不喜欢以数组形式访问项目,则可以始终添加访问器方法,以使阵列再次看起来像单独的项目:

class Point 
{
public:
   [...]

   float & m_x() {return m_array[0];}
   float & m_y() {return m_array[1];}
   float & m_z() {return m_array[2];}

private:
   float m_array[3];
};

[...]

myPoint.m_x() = 5;
myPoint.m_y() = myPoint.m_x() + myPoint.m_z();
[etc]
点赞