这两个敌人有什么区别?

时间:2013-12-04 06:35:39

标签: c++

通常:

 for(int i=0 ; i<252 ; i++) grid_color[i]=0.4;

不寻常:

for(int i=0 ; i<252 ; grid_color[i++]=0.4) ;

两者之间有什么区别吗?实际上我问自己是否异常比通常更快

3 个答案:

答案 0 :(得分:1)

两者之间没有显着差异。第二个是将循环增量与循环体相结合。执行速度也应该没有区别。

答案 1 :(得分:0)

风格是主要的区别(以及风格的后果,例如可维护性)

我希望你会发现第二名在这方面的选票很差。

回复:你的子问题,应该没有速度差异。

答案 2 :(得分:0)

没有区别。选择第一个超过第二个。实际上,为了避免在向for-loop体添加额外指令时出错,请考虑始终使用大括号。

for(int i=0 ; i<252 ; i++){
    grid_color[i]=0.4;
}

你当然不必,但从维护的角度考虑是值得的。

由于您似乎关注效率,因此在您绝对需要时(当操作顺序要求获得正确的结果时),尝试养成仅使用后增量运算符而不是预增量运算符的习惯。如果是这样的基本for循环,你应该真正使用预增量运算符。

for(int i=0 ; i<252 ; ++i){
    grid_color[i]=0.4;
}

对于像int这样的基本类型,它确实无关紧要,但你可能想养成使用预增量超过后增量的习惯,因为后增量必须创建一个副本,执行增量,并返回副本。预增量只是递增并返回值。这种选择可能成为非基本类型的效率问题;例如迭代器。

最后,如果您使用的是C ++ 11标准,请考虑使用专为所有类型设计的大括号初始值设定项(如果您创建自己的类型,则必须实现该功能)。

for(int i{0}; i<252 ; ++i){
    grid_color[i]=0.4;
}

有趣的事实:如果初始化没有值的int,它将为零。

for(int i{}; i<252 ; ++i){
    grid_color[i]=0.4;
}

我仍然会把零放在那里。

永远不要这样做:

for(int i; i<252 ; ++i){
    grid_color[i]=0.4;
}

变量i未定义。