会是怎样的代码的输出以下代码的输出是什么?
int a=3,b=4;
++a*=++b;
cout<<a<<endl;
编译器显示a=20
output.How precedence
和operator associativity
正在这里使用?
我的理解是:
上的++a*=++b;
左侧第一b
递增我们的unary
操作然后是 转*=
所以 表情变得++a = a * ++b;
为a=3
和b=5
现在使它成为15
然后15
是分配到a
并递增。最后得到16
但编译器给出20
您的理解错误。你的代码修改'a' *两次*没有插入*序列点*。因此你的代码有*未定义的行为*。详细解释请参阅cHao的链接。 – john 2013-04-22 21:14:05
@john - 这是一种正式的说法,即编译器不必处理这种****。 – 2013-04-22 21:18:23
由于缺乏序列点,这是未定义的行为。这可能是4 * 5 = 20;然而,你不知道++ a的结果是什么,所以它是未定义的。 – 2013-04-22 21:18:36