相关疑难解决方法(0)

为什么这些构造使用前后增量未定义的行为?

#include <stdio.h>

int main(void)
{
   int i = 0;
   i = i++ + ++i;
   printf("%d\n", i); // 3

   i = 1;
   i = (i++);
   printf("%d\n", i); // 2 Should be 1, no ?

   volatile int u = 0;
   u = u++ + ++u;
   printf("%d\n", u); // 1

   u = 1;
   u = (u++);
   printf("%d\n", u); // 2 Should also be one, no ?

   register int v = 0;
   v = v++ + ++v;
   printf("%d\n", v); // 3 (Should be the …
Run Code Online (Sandbox Code Playgroud)

c increment operator-precedence undefined-behavior sequence-points

793
推荐指数
13
解决办法
7万
查看次数

具有递增的非直观表达式评估

对于以下代码

<?php

$a=1;   $b=$a++;              var_dump($b);
$a=1;   $b=$a+$a++;           var_dump($b);
$a=1;   $b=$a+$a+$a++;        var_dump($b);
$a=1;   $b=$a+$a+$a+$a++;     var_dump($b);
$a=1;   $b=$a+$a+$a+$a+$a++;  var_dump($b);
Run Code Online (Sandbox Code Playgroud)

我得到了这个结果:

int(1)
int(3)
int(3)
int(4)
int(5)
Run Code Online (Sandbox Code Playgroud)

我预计1,2,3,4,5而不是1,3,3,4,5.$a=1; $b=$a+$a++;我们获得后为什么$b=3

PHP 7.1.5-1 + deb.sury.org~xenial + 1(cli)(建于2017年5月11日14:07:52)(NTS)

php increment opcode

46
推荐指数
3
解决办法
2007
查看次数

PHP中的++ $ a + $ a ++是多么模糊?

php手册声称:

$a = 1;
echo ++$a + $a++;
Run Code Online (Sandbox Code Playgroud)

在它的语法下是模棱两可的,但对我来说似乎非常清楚.++ $ a和$ a ++首先从左到右计算,所以++ $ a递增然后返回2,$ a ++返回2然后递增.2 + 2的总和是4,所以它会回显4.然而,PHP手册非常清楚地说明它可以打印4或5.

php规范没有指定操作将从左到右执行吗?

即使它没有强制执行操作将从左到右执行,在这种情况下,它不会返回4无论如何?

编辑:我重读了页面,并声明它由每个特定的操作员确定.+具有最低优先级,并且从左到右进行评估,因此看起来我之前的假设是正确的.我还是不明白.

php grammar interpreter operator-precedence

8
推荐指数
2
解决办法
2193
查看次数

echo ++ $ a + $ a ++的输出应该是多少

在PHP手册,运算符优先级部分,有这个例子:

// mixing ++ and + produces undefined behavior
$a = 1;
echo ++$a + $a++; // may print 4 or 5
Run Code Online (Sandbox Code Playgroud)

我理解行为是未定义的,原因如下:

由于x + y = y + x解释器可以以任何顺序自由地评估xy添加,以便优化速度和/或存储器.我在查看本文中的C代码示例后得出结论.

我的问题是上面提到的PHP代码的输出应该是4表达式和子表达式的评估方式:

  • op1 = ++ $ a => $ a = 2,op1 = 2; op2 = $ a ++ => op2 = 2,$ a = 3; 2 + 2 = 4
  • op1 = $ a ++ => op1 = …

php operator-precedence pre-increment post-increment

8
推荐指数
1
解决办法
2878
查看次数