我有2个Reset()
个功能。与[1]相比,[2]是否有任何性能影响?
[1]
void Reset(){
_a = 0;
_b = 0;
_c = 0;
_d = 0;
}
[2]
void Reset(){
_a = _b = _c = _d = 0;
}
答案 0 :(得分:4)
与往常一样,当事情重要时,你应该凭经验测试它们,而不是仅依靠理论推理。
但是,在这种情况下,我认为编译后两个代码片段会变成相同的,所以没有区别。
......至少在典型情况下。例如,如果您的变量属于具有
属性的类型然后你会发现链式分配要贵得多,除非优化器足够聪明。
(反之,如果分配一个整数但复制分配很便宜,则相反)
答案 1 :(得分:-3)
从技术上讲,第二个版本将按以下顺序调用整数的“复制构造函数”:
_c = _d = 0; // _d = 0 returns an rvalue (i.e a reference to _d) and
//that reference is copied into _c, unless _c is a reference
依此类推,直到你到达_a
。但是,如果优化器意识到0只是一个立即值,它可以对两个版本的代码使用相同的指令。