运算符优先..()和++

C77*_*431 1 c++ operator-precedence pre-increment post-increment

敬礼..

我有一个不寻常的问题. 在MSDN库的这个表中,我们可以看到()的优先级高于++(预增量).但是当我运行这段代码时,似乎++(prefex)的优先级更高:

int main()
{
    int a=3,b=2,x;
    x=++a + (a-b);
    cout<<"x= "<<x;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

答案是:

X = 6

仅在prefex ++中发生这种情况,并且按照我预期的后增量工作.

有什么缘故吗?问候..

int main()
{
    int a=3,b=2,x;
    x=a++ + (a-b);
    cout<<"x= "<<x;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

X = 4

(我使用的是Microsoft Visual C++ 2010快递)

Oli*_*rth 8

像往常一样,这是未定义的行为.有没有顺序点+,所以它不是在什么点的定义++更新a.这不是优先问题.


jor*_*iki 5

这里有两个误解.

第一种:在表中,()引用函数调用,而不是用于分组的括号.用于分组括号不具有一定优先级的操作,但对于执行比由操作者给定的优先级不同解释的装置.因此,无论运算符的优先级如何,括号中的任何内容都被视为一个单元.

第二种:运算符优先级是指运算符在解析其他模糊语法时所采用的优先顺序; 它没有提到副作用的时间顺序.因此,前缀++总是在计算表达式之前增加值,posfix ++总是在计算表达式之后增加值,而不依赖于语法运算符优先级.