(1) m=1; n=m++m++;
(2) a=0;
if(a++||a) cout<<"ok""<<endl;
如上式,在c++运算中,有特定的顺序点来完成此前需对变了所做的修改,比如 对a++中a进行+1操作。
C/C++语言定义(语言的参考手册)明确定义了顺序点的概念。顺序点位于:
1. 每个完整表达式结束时。完整表达式包括变量初始化表达式,表达式语句,return语句的表达式,以及条件、循环和switch语句的控制表达式( for头部有三个控制表达式);
2. 运算符 &&、||、?: 和逗号运算符的第一个运算对象计算之后;
3. 函数调用中对所有实际参数和函数名表达式(需要调用的函数也可能通过表达式描述)的求值完成之后(进入函数体之前)。
所以,对于(1),依据编译器的不同会产生不同的结果。对于(2),因为碰到 || 顺序点,所以a进行+1操作, 第二个a的值为1.