循环中的有条件语句混淆

confusing conditional statement in a for loop

本文关键字:语句 有条件 循环      更新时间:2023-10-16

我看到了一些代码,我惊讶地看到有条件的语句。我已经尝试运行它,但是循环变成了无限的循环。

完整代码是:

#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
  int *n; 
  for (int i=0; i<5e7; i++) 
  n = new int; 
  delete n; 
}  

这甚至是如何编译的,为什么循环成为无限循环?这些有条件语句是什么类型?

表示浮动常数C 标准引入浮动文字(2.14.4浮动文字)

floating-literal:
fractional-constant exponent-partopt floating-suffixopt
digit-sequence exponent-part floating-suffixopt
fractional-constant:
digit-sequenceopt. digit-sequence
digit-sequence .
exponent-part:
e signopt digit-sequence
E signopt digit-sequence
sign: one of
+ -
digit-sequence:
digit
digit-sequence ’opt digit
floating-suffix: one of
f l F L

因此,5e7是浮动的字面意义。您可以在控制台上输出以下方式

std::cout << std::fixed << std::setprecision( 0 ) << 5e7 << std::endl;

,输出将为

50000000

根据这种情况下通常的算术转换的规则

i < 5e7

变量i转换为double类型(因为浮动字面具有double类型),并将其与浮动文字进行了比较。一旦我将大于或等于浮动的字面意义,循环就会停止其迭代。当int类型的最大值不小于浮动文字的值时,可能会发生。

您可以检查int类型对象的最大值以下方式

#include <limits>
//...
std::cout << std::numeric_limits<int>::max() << std::endl;

在运行此代码的地方,我得到以下结果

2147483647

因此,对于这些值,循环不能无限。但是,也许在您的系统中,int的最大值小于浮动文字的值。在这种情况下,循环确实将是无限的。