求值顺序问题

来源:互联网 发布:js 动态隐藏鼠标指针 编辑:程序博客网 时间:2024/04/30 19:34
(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.

c++求值顺序 裘老解释