运算符 解释 结合方式 () [] -> . 括号(函数等),数组,两种结构成员访问 由左向右 ! ~ ++ -- + - * & (类型) sizeof
否定,按位否定,增量,减量,正负号, 间接,取地址,类型转换,求大小 由右向左 * / % 乘,除,取模 由左向右 + - 加,减 由左向右 << >> 左移,右移 由左向右 < <= >= > 小于,小于等于,大于等于,大于 由左向右 == != 等于,不等于 由左向右 & 按位与 由左向右 ^ 按位异或 由左向右 | 按位或 由左向右 && 逻辑与 由左向右 || 逻辑或 由左向右 ? : 条件 由右向左 = += -= *= /= &= ^= |= <<= >>= 各种赋值 由右向左 , 逗号(顺序) 由左向右
好好 看看这个你就明白了
vs2010得到的是2 0
用c++测试了一下
#include
class a
{
public:
a()
{
}
a & operator ++()
{
printf("++a\n");
return *this;
}
a const operator ++(int)
{
printf("a++\n");
return *this;
}
};
void main()
{
a p;
printf("",(++p),(p++));
}
发现输出a++ ++a
说明p++先被执行
也就是说从右向左执行。
首先p++ p变为1 返回原数值0
由于++p返回的是原数值的引用,所以p变为2 返回
结果为2 0
可能不同编译器结果不同吧。
不过1 0感觉比较奇怪。说明++p返回的是原数值,而不是引用。
编译时,编译选项:不优化 /Od 得 1 0。
编译选项选优化 /O1 /O2 都得 2 0。
应避免这种程序写法。
爱咋咋!!这个没有标准!!!
答案是1 0 ,可能不同的编译器结果不同吧, ++p 是先进行++运算,而 p++ 是先用在++