代码的输出是什么
int a=3,b=4;
++a*=++b;
cout<<a<<endl;
编译器显示a=20
输出。这里是否使用了precedence
和operator associativity
?
b
左侧的第一个++a*=++b;
会增加unary
运算符
转过*=
所以
表达式现在变为++a = a * ++b;
a=3
和b=5
,因此变为15
,然后将15
分配给a
并递增。最后获得{{1}但编译器给出了16
答案 0 :(得分:1)
在您的特定编译器的特定情况下,似乎首先a增加到4并且b增加到5,然后a * = b执行而a变为20(4 * 5)。但是,其他编译器可能会给出不同的结果,因为它不是人们在评论中提到的定义行为