链接任务的性能含义是什么?

时间:2015-04-07 19:45:08

标签: c++ c

我有2个Reset()个功能。与[1]相比,[2]是否有任何性能影响?

[1]

void Reset(){
  _a = 0;
  _b = 0;
  _c = 0;
  _d = 0;
}

[2]

void Reset(){
  _a = _b = _c = _d = 0;
}

2 个答案:

答案 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只是一个立即值,它可以对两个版本的代码使用相同的指令。