C ++中的神秘无限循环

时间:2018-08-17 11:43:15

标签: c++ for-loop

#include <iostream>
#include <string>
using namespace std;

int main()
{
    bool flag = false;

    for (int i = 0; i < 4, !flag; i++)
    {
        cout << "TESTING1..\n";

        for (int j = 0; j < 4, !flag; j++)
        {
            cout << "TESTING2.. \n";
            if (j = 0) flag = true;
        }
    }
}

我正在尝试实现一种机制,其中我可以使用标记技术退出嵌套循环。但是,上述代码会导致无限循环。对此有解释吗?

标志变为真后,是否所有循环都不会爆发?

2 个答案:

答案 0 :(得分:6)

if (j = 0) flag = true;将永远不会被触发。

您的意思是:if (j == 0) flag = true;

单个=是分配;双==是比较。

答案 1 :(得分:0)

两个原因:

if (j = 0) flag = true;将永远不会为真,因为j=0是赋值为0-false的赋值。因此,flag始终是false

在语句i < 4, !flag中,使用了逗号运算符。这意味着将评估所有子表达式,并且表达式将使用最后一个子表达式的值。因此i < 4, !flag == !flag

由于始终flag == false!flag始终是true,因此无限循环