C++中初始a为1的while(a--)循环为何会输出yes
int a{1}; while(a--){ cout << "yes"; }
运行结果原因
核心是对C++中后置自减运算符的求值逻辑理解有偏差:
- 后置自减表达式
a--的求值规则是:先返回变量a当前的原始值,再对a本身执行减1操作,作为while判断依据的是表达式返回的原始值,不是减完之后的值。
这段代码的实际执行顺序:
- 初始化阶段
a被赋值为1 - 第一次判断while循环条件时,计算
a--:先取出a当前的值1作为整个表达式的结果,这个非0值会被判定为循环条件成立;取值完成后a才被减为0 - 条件成立,进入循环体执行输出语句,打印
yes - 循环体执行完毕后再次判断条件:此时
a的值是0,a--先返回0作为表达式结果,判定条件不成立,循环终止,取值完成后a才会被减为-1
补充:如果换成前置自减
--a,逻辑就会变成先把a减1,再返回减完的结果作为判断值,这种情况下第一次判断拿到的就是0,确实不会进入循环输出内容。
内容的提问来源于stack exchange,提问作者Hritik Rana
相关产品推荐
相关产品推荐

