返回信息流答案是i=8,求详细推算过程
这是一条镜像帖。来源:北邮人论坛 / cpp / #73650同步于 2013/9/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
短路求值问题
chengjinqian
2013/9/6镜像同步40 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
i = 6: ++i < 7 为假 执行 && 右侧 表达式
i = 7: i++ / 6 值为1 为真, || 右侧表达式被短路
i = 8; 打印
edit: 上面的不对
是++i < 7为假 短路了 && 右侧的 i++ < 6 执行++i <= 9
i还是等于8
【 在 iFadeToBlack 的大作中提到: 】
: 我来给个无关答案:if里面的条件能抽个函数出来吗?能吗?能吗?晕括号的伤不起!
里面所有的括号都可以去掉而不改变语法结构(虽然语义是未定义的)。
其实
((++i<7)&&(i++/6))||(++i<=9)
就是
++i<7&&i++/6||++i<=9
一样的。
写作
++i < 7 && i++ / 6 || ++i <= 9
也行,都一样。
【 在 iFadeToBlack 的大作中提到: 】
: 我来给个无关答案:if里面的条件能抽个函数出来吗?能吗?能吗?晕括号的伤不起!
其实我想问的是,这个“条件”能不能用人可以懂的语言描述出来。
为什么++i<7为假执行&&右侧表达式
【 在 jokerlee 的大作中提到: 】
: i = 6: ++i < 7 为假 执行 && 右侧 表达式
: i = 7: i++ / 6 值为1 为真, || 右侧表达式被短路
: i = 8; 打印
短路错了吧...
【 在 jokerlee 的大作中提到: 】
: i = 6: ++i < 7 为假 执行 && 右侧 表达式
: i = 7: i++ / 6 值为1 为真, || 右侧表达式被短路
: i = 8; 打印
或运算先执行左边,然后是与运算先执行左边部分,左边为false忽略与运算右边,跳到或运算右边,执行自加,true,进入条件体。这些是编译器优化相关,答案不唯一,换平台就可能不一样。