我看到了一些代码,我很惊讶看到条件语句。 我试过运行它,但循环变成了一个无限循环。
完整的代码是:
#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;
}
如何编译,为什么循环变成无限循环? 这些条件陈述是什么?
答案 0 :(得分:2)
为了表示浮动常量,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
的最大值小于浮动文字的值。在这种情况下,循环确实是无限的。