0

b = a++ * ++a ?

hi , so i just started C++ and have question. i almost know the difference between a++ and ++a ,but have a problem in solving this : int a = 2; int b = a++ * ++a; cout<<a; cout<<b; i have no idea how a will be 4 and b will be 8 .can someone explain it to me pls ?

23rd Jan 2023, 4:28 PM
ARNO Dorian
ARNO Dorian - avatar
5 odpowiedzi
+ 3
Having an expression which modifies a variable more than once in a single sequence point* results in undefined behavior. This means that there is no guarantee that b will be 8. https://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points/4183735#4183735 *Even in later revisions of C++, where sequence points have been replaced, it remains undefined behavior due to the combination of side effects and the unsequenced nature of the expression. In fact, this has been discussed multiple times over the past few years in SL https://www.sololearn.com/discuss/2470770/ https://www.sololearn.com/discuss/527482/
24th Jan 2023, 1:29 AM
Hatsy Rei
Hatsy Rei - avatar
+ 1
Let's work through it... a = 2 Now look at the part on the right side of the assignment (a++ * ++a). We know this works left-right (operator precedence, link at bottom). The first side: a++ This is saying, take 'a' and then increment it, so the value of 'a' is taken as 2, the variable 'a' is then incremented to 3. The second side: ++a Now 'a' is 3, as this is prefix this is incremented and to the value of 4. Then it's simple math 2 x 4. Operator precedence: https://en.cppreference.com/w/cpp/language/operator_precedence
23rd Jan 2023, 5:18 PM
DavX
DavX - avatar
+ 1
changing a variable twice without an intervening sequence point is one example of undefined behaviour. the "a++ + ++a" expression causes an undefined behavior, as "a" is modified twice within a single sequence point (the "*" operator not constituting a sequence point). // same for the expression "++a * a++" GCC → https://godbolt.org/z/vTGGc7PaM CLANG → https://godbolt.org/z/hjKhjbWPn sequence points → https://en.wikipedia.org/wiki/Sequence_point
24th Jan 2023, 2:52 PM
MO ELomari
MO ELomari - avatar
0
the answer is 4. when the plus signs are in front of the variable things are done on the spot if after the variable ...addition is happening on the next line...so third line is like: b=a; a=a + 1; 4
23rd Jan 2023, 5:14 PM
BŁΛCKŠTØŔM
BŁΛCKŠTØŔM - avatar
0
I don't have a clue what Blackstorm was meaning, however as said it's operator precedence. Working from left-to-right. You can visualize it better if you chuck in some parenthesis: int a = 2; int b = (a++) * (++a);
23rd Jan 2023, 5:26 PM
DavX
DavX - avatar