c++ - Is "++l *= m" undefined behaviour? -


i have started studying c++0x. came across follow expression somewhere:

int l = 1, m=2; ++l *= m; 

i have no idea whether second expression has defined behavior or not. asking here.

isn't ub? eager know.

in code above, prefix ++ has precedence on *=, , gets executed first. result l equals 4.

update: indeed undefined behavior. assumption precedence ruled false.

the reason l both lvalue , rvalue in *=, , in ++. these 2 operations not sequenced. hence l written (and read) twice "without sequence point" (old standard wording), , behavior undefined.

as sidenote, presume question stems changes regarding sequence points in c++0x. c++0x has changed wording regarding "sequence points" "sequenced before", make standard clearer. knowledge, not change behavior of c++.

update 2: turns out there defined sequencing per sections 5.17(1), 5.17(7) , 5.3.2(1) of n3126 draft c++0x. @johannes schaub's answer correct, , documents sequencing of statement. credit should of course go answer.


Comments

Popular posts from this blog

asp.net - repeatedly call AddImageUrl(url) to assemble pdf document -

java - Android recognize cell phone with keyboard or not? -

iphone - How would you achieve a LED Scrolling effect? -