加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:16:41 所属栏目:百科 来源:网络整理
导读:例如,我有一个班级 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
例如,我有一个班级

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,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]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读