这可能是一个愚蠢的问题,如果函数中没有任何内容,显然任何事情都会更快,因为它不需要处理任何事情。但是,我搞砸了SFML,因此决定尝试使用for循环滞后我的程序(因为每个游戏循环都是1帧)。
我制作了一个循环,每1帧计数为50,000,000,说实话,它仍然以10 FPS的速度运行。但是,第二秒钟我放置了std::cout << index << std::endl;
,程序将不会在处完成一帧,并且每10秒钟会计数1000。
内部没有任何东西的循环真的会使它快得多吗?
如果您的循环中没有任何内容,而仅计数为:
for (int i = 0; i < 50; ++i) {}
然后,任何体面的优化器都会简单地删除整个循环,因此甚至不会执行计数。原因是没有副作用,因此删除循环会得到一个等效的程序。
即使以后再打印i
计数器变量,大多数优化器仍然可以删除循环,因为他们知道i
将在循环后为50
。
因此,可以优化的“空”循环无限快。