哪个for循环在C++中更有效

Which for loop is more efficient in C++?

本文关键字:有效 C++ for 循环 哪个      更新时间:2023-10-16

我的朋友和我在工作中正在争论这三个for循环中哪一个在C++中更有效(只是为了举例,它们将循环10次):

//A) 
for(int i = 0; i<10; i++)
{
    // Do stuff. 
}
//B) 
for(int i = 0; i< 10; ++i)
{
    // Do stuff.
}
//C) 
for(int i = 11; --i;)
{
    // Do stuff.
}
// D) 
// Anything you guys know that is better.

那么,哪一个是最好的,为什么?

任何优秀的编译器都不会因为使用哪个版本而惩罚您。正如您所看到的,所有的循环都可以归结为相同的代码,其中可能有一条指令被重新排序。

选择一个可读性最好、能清楚地传达你想做什么的

如果你对没有优化的情况感兴趣,可以点击这里:

示例A

示例B

示例C

正如您所看到的,即使没有优化,A和B也会生成完全相同的代码,而C实际上有更多的指令(在我看来,可读性要差得多)!

该代码已在G++5.3下进行了分析,不同编译器的结果可能不同。要点是:这是一个微观(纳米?)优化。

通常预增量/预减量比后增量/后减量快,因为后-<>需要保存一个临时值以便返回。int可能不是这样,在int中,根据平台/编译器的不同,结果可能完全相同。在任何情况下,我都不期望预-<>比post-<>慢。

某些体系结构对"=="的性能优于对"大/小"的性能。(选项C)

作为最终答案:性能可能相似或相等,在某些特定情况下,最后一个可能更快。不利的一面是它的代码有点模糊,所以我推荐第二种选择。

这些循环的效率主要取决于的效率

// Do stuff. 

实现。如果在编写循环的方式上存在显著的效率差异,那么整个循环很可能对整个程序的执行速度影响很小(因为只有当// Do stuff只占循环总时间的一小部分时,才会发生这种情况)。

一般来说,除非你对代码进行了分析,并且你知道这样做真的很值得,否则你不应该优化任何东西