循环中的有条件语句混淆
confusing conditional statement in a for loop
我看到了一些代码,我惊讶地看到有条件的语句。我已经尝试运行它,但是循环变成了无限的循环。
完整代码是:
#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
的最大值小于浮动文字的值。在这种情况下,循环确实将是无限的。
相关文章:
- 我似乎对if/else的基本语句有问题:/
- 如何使用 soong 命名空间来有条件地编译模块
- 为什么布尔开关语句有编译器警告?
- C++ 参考:这两个语句有什么区别?
- 有条件地将默认参数传递给函数(使用"?"运算符)
- 根据模板类型有条件地删除变量
- 有条件地选择带有 decltype() 和三元运算符的类型
- 对于单个数据 WORD 的 memcpy 和赋值语句有什么区别?
- 如何使用 SFINAE 在方法调用中有条件地定义变量?
- 有条件的打印和计数在 std::map 上有限制
- 如何在 c++ 中有条件地包含标头?
- 如何仅在Qt是用ltcg构建时才有条件地启用ltcg?
- 如何在Visual Studio 2019中有条件地编译c++源文件
- C++可以有条件地向下转换类指针吗
- 使用 SFINAE 有条件地解析分配器成员
- 有条件地删除宏
- 有条件地包含C++标准库
- 如何有条件地将元素添加到 std::array - C++11
- 循环中的有条件语句混淆
- if语句- c++:在头文件中有条件地更改