术语“运算符优先级”和“评估顺序”是编程中非常常用的术语,对于程序员来说是非常重要的。 而且,据我了解,这两个概念是紧密相连的。 谈论表情时,离不开对方。 让我们举一个简单的例子: 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语句的控制表达式以及所有三个表达式。 在函数调用中输入函数之前。 […]