为了表示浮点常量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
小于浮点文字的值。在这种情况下,循环确实是无限的。
5e7是50000000的科学计数法。 –
等效代码为'for(int i = 0; i <5e7; i ++){n = new int; }' –
这是很多内存泄漏。 – AndyG