0
Unable to deduce the output
#include <iostream> using namespace std; int main() { int n=20,a; a=++n+n++; cout<<a; } What's the way of proceeding such questions?
5 ответов
+ 4
Normally, you'd think it should be 42:
a = (n+1)20+21(n+1)
and after that n should equal 22.
And while the latter is true - n =22 indeed, those kind of statements get tricky depending on the compiler version. Sololearn's one treats it like:
20(+1)+21(+1) ==> 21+22 ==> 43
This is why it is generally recommended to avoid mixed pre/post increment operation statements.
+ 3
43 and 43 on *all* compilers.
Now ++n and n++ are *not* the same precedence. ++n is pre-increment a n++ is post. Precedence is ++n before all operations. So:
a = ++n + n++;
a = 21 + n++;
(++n is pre-inc so n is 21 before all else)
Now that's out the way, the rest is common sense.
Either:
a = (21 + 21)++;
a = 42++;
a = 43;
Or
a = 21 + 21++;
a = 21 + 22;
a = 43
This case will not be compiler-dependent. But there are plenty similar cases that will. In this case it matters not since all compilers obey pre-inc. But FYI, even if it didn't, L-R rules kick in. Left to Right Rule:
a = ++n+n++;
a = 21+21++;
a = 42++;
a = 43;
See?
On a final note, these questions crop up a lot and they really don't represent real life problems since most sane people will use parenthesis if for no other reason than code readability.
(Parenthesis) are your friends.
+ 1
First of all tell me which language you are using to write above programme.
0
@WHJ Its in CPP
0
I once read the results of this kind of incrementation depends on the compiler.