返回信息流k=0;
t=k&&(++k);
结果是t=0,这让我很不解,为什么不先进行括号内的++k呢?括号的优先级应该比&&高才对啊.请高手指点一下
这是一条镜像帖。来源:北邮人论坛 / cpp / #44834同步于 2010/10/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
运算符计算顺序问题
disk
2010/10/15镜像同步14 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
这我知道,但我觉得括号里的内容应该先算才对啊,因为括号的优先级比较高。
【 在 TRone 的大作中提到: 】
: &&运算符是前面条件为真才继续下去的吧,所以压根没有进入到++k的括号里面。t=0.
: --
: 消失一下。
: ...................
【 在 disk 的大作中提到: 】
: k=0;
: t=k&&(++k);
: 结果是t=0,这让我很不解,为什么不先进行括号内的++k呢?括号的优先级应该比&&高才对啊.请高手指点一下
: ...................
按你的思路,俨然:
int k=0;
printf("%d",k?(++k):(k+=2));
答案输出应该是啥?1还是3还是2?
显然还是把问题搞复杂了,这种双目或者三目的运算符,你还是要先进行逻辑的。
我之前也从没想过这种问题,但今天恰巧在其他地方看见有人问k&&++k为什么不先算后者,一时间竟想不出什么办法驳倒他。你的例子举得挺好的,但能否有更有理论依据的说法呢?
【 在 warmbupt 的大作中提到: 】
: : k=0;
: : t=k&&(++k);
: : 结果是t=0,这让我很不解,为什么不先进行括号内的++k呢?括号的优先级应该比&&高才对啊.请高手指点一下
: ...................
re
【 在 lanphon 的大作中提到: 】
: 要是谁真的在工程里边写这样的代码,非一巴掌pia死不可。。。
: --
: 考前:GE,你懂的
: ...................
这是那个编译器对逻辑运算截短处理了,或叫做短路运算,k为0这个表达式已经为false了,所以没必要对后面的进行运算了,你可以把短路运算看成是最高优先级,1 || (++k),k也不会运算。这个跟编译器有很大关系,有的可能就从右边开始算。
理论上是不应该这么弄的,不知道标准里怎么说,但是大部分编译器都这样处理了。
【 在 disk 的大作中提到: 】
: k=0;
: t=k&&(++k);
: 结果是t=0,这让我很不解,为什么不先进行括号内的++k呢?括号的优先级应该比&&高才对啊.请高手指点一下
: ...................