C++在for循环中使用预先计算的限制器

qtt*_*wow 6 c++

在PHP这样的脚本语言中有这样的for循环会是一个非常糟糕的主意:

string s("ABCDEFG");
int i;
for( i = 0; i < s.length(); i ++ )
{
   cout << s[ i ];
}
Run Code Online (Sandbox Code Playgroud)

这是一个例子,我不是在构建这样的程序.(对于那些觉得他们必须告诉我为什么这段代码< 在这里插入不好的东西 >>的人

如果将此C++示例转换为类似的PHP脚本,则会在每个循环周期计算字符串的长度.这将导致现实脚本中的巨大性能损失.

我认为这同样适用于C++程序,但是当我看一下教程,几个开源库和其他代码时,我发现循环的限制器没有预先计算.

  • 我应该预先计算字符串的长度s吗?
  • 为什么限制器不会总是预先算出?(在教程和示例中看到了这一点)
  • 编译器是否进行了某种优化?

Mik*_*vey 11

这都是相对的.

PHP被解释,但如果s.length进入PHP解释器的编译部分,它将不会很慢.但即使它很慢,花费的时间s[i],以及花费的时间又如何cout <<呢?

在淹没其他东西的同时,很容易专注于循环开销.

就像你用C++写的那样,并cout写入控制台,你知道什么会占主导地位吗?cout会不会因为那个无辜的<<操作员调用大量的库代码和系统例程.