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. 解决方法
我假设你的意思是“与进行数组查找相比”. 如果是这样,答案是(可能)是 – 任何分支操作都可能导致管道停滞(如果CPU错误预测将采取哪个分支),这可能会使事情变慢. CPU分支预测现在相当不错,所以它在现实生活中可能不是问题 – 它将在很大程度上取决于调用此代码的程序的使用模式.
您可以使用三项数组而不是三个单独的项来删除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] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |