Tag: 顺序评估

为什么是$ a + ++ $ a == 2?

如果我尝试这个: $a = 0; echo $a + ++$a, PHP_EOL; echo $a; 我得到这个输出: 2 1 演示: http : //codepad.org/ncVuJtJu 这是为什么? 我希望得到这个作为输出: 1 1 我的理解: $a = 0; // a === 0 echo $a + ++$a, PHP_EOL; // (0) + (0+1) === 1 echo $a; // a === 1 但为什么不是输出?

Java中的评估顺序是什么?

我正在阅读一些Java文本,并得到以下代码: int[] a = {4,4}; int b = 1; a[b] = b = 0; 在文中,作者没有给出明确的解释,最后一行的效果是: a[1] = 0; 我不太清楚,我明白:评估是如何发生的?

运营商优先级与评估顺序

术语“运算符优先级”和“评估顺序”是编程中非常常用的术语,对于程序员来说是非常重要的。 而且,据我了解,这两个概念是紧密相连的。 谈论表情时,离不开对方。 让我们举一个简单的例子: int a=1; // Line 1 a = a++ + ++a; // Line 2 printf("%d",a); // Line 3 现在,显然第二Line 2导致未定义行为,因为C和C ++中的序列点包括: 在&&(逻辑AND)的左和右操作数的评估之间,|| (逻辑OR)和逗号运算符。 例如,在表达式*p++ != 0 && *q++ != 0 ,子表达式*p++ != 0所有副作用在任何尝试访问q之前完成。 在三元“问号”算子的第一个操作数和第二个或第三个操作数的评估之间。 例如,在表达式a = (*p++) ? (*p++) : 0 a = (*p++) ? (*p++) : 0在第一个*p++之后有一个序列点,这意味着它已经被执行第二个实例的时间增加了。 在完整的表达式结尾。 这个类包括for语句中的表达式语句(如赋值a=b; ),返回语句,if,switch,while或do-while语句的控制表达式以及所有三个表达式。 在函数调用中输入函数之前。 […]