shifu900518123 2013-11-17 13:15 采纳率: 0%
浏览 1835
已采纳

PHP的一个坑-----自增运算符

$a=1;
echo $a+$a++; //3

$a = 1;
echo $a + $a + $a++; //3

输出都是3,为什么不先算$a++,玩了之后再和前面的$a相加,这样的话不是就是5了么

  • 写回答

1条回答

  • todd_leftcode 2013-11-17 14:50
    关注

    因为$a++是后置自增运算,是先求值再自增的。 ++$a是先自增再求值的。 这个在c/c++/java/c#。。。中都是一个套路。

    [UPDATE]
    以上说法极不严谨基本是错误的。

    虽然$a++为后置自增运算,即先求值再加1, 但依然不能阻止编译器先+1再求值,只要其+1的结果不影响求值结果。
    比如:$b = $a++; 可以拆解成 $c = $a; $a++; $b = $c; 当然这只是可能
    对于 $a + $a++; 按上边的路子会变成 $c = $a; $a++; return $a + $c; 结果可想而知了。
    但这些都是基于猜测,一切由编译器根据实际情况且不违背语言规范地决定。

    具体原理请google "顺序点"

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码