471,873 Members | 1,467 Online

# meaning of j++

i have just started to learn C++ from Bruce Eckel's book "Thinking in
C++ 2/e" & i am trying to understand the meaning of "j++". ++j is
pretty clear to me. i am using "g++" on my Debian Sarge.

here is the problem:

i = j = k = l = 0

++i ---i = 0 ;; OK, fine

j++ -j-- = 1 ;; WHAT?, why not 0

k++ -k++ = 1 ;; WHAT?, why not 2.

l-- = -l-- = -1 ;; why not -2

I searched archives but all i got is optimisations regarding the use of
++j & j++ but not regarding meaning of these. does anybody have any
idea? Bruce did not explain this behaviour in his book (except for a
single sentence)

thanks

"arnuld"

Aug 3 '06 #1
11 8707
arnuld wrote :
j++ -j-- = 1 ;; WHAT?, why not 0
because j-- returns the old value, not the new one.
>
k++ -k++ = 1 ;; WHAT?, why not 2.
because k++ returns the old value, not the new one.

Aug 3 '06 #2
arnuld wrote:
i have just started to learn C++ from Bruce Eckel's book "Thinking in
C++ 2/e" & i am trying to understand the meaning of "j++". ++j is
pretty clear to me. i am using "g++" on my Debian Sarge.

here is the problem:

i = j = k = l = 0

++i ---i = 0 ;; OK, fine

j++ -j-- = 1 ;; WHAT?, why not 0

k++ -k++ = 1 ;; WHAT?, why not 2.

l-- = -l-- = -1 ;; why not -2
We're in a C++ language newsgroup. The text above is not C++. Care
to explain what it is you mean by all those valid C++ tokens mixed up
in a strange order?
[..]
V
--
Aug 3 '06 #3

arnuld wrote:
i have just started to learn C++ from Bruce Eckel's book "Thinking in
C++ 2/e" & i am trying to understand the meaning of "j++". ++j is
pretty clear to me. i am using "g++" on my Debian Sarge.

here is the problem:

i = j = k = l = 0

++i ---i = 0 ;; OK, fine

j++ -j-- = 1 ;; WHAT?, why not 0

k++ -k++ = 1 ;; WHAT?, why not 2.

l-- = -l-- = -1 ;; why not -2

I searched archives but all i got is optimisations regarding the use of
++j & j++ but not regarding meaning of these. does anybody have any
idea? Bruce did not explain this behaviour in his book (except for a
single sentence)

thanks

"arnuld"
This can be confusing, but is really easy!

The post increment operator like j++ maps to a funtion like this:

int operator++()
{
int tmp = j
j += 1;
return tmp;

}

And the pre incremend operator maps to a function like this:
int operator++(int)
{
j += 1;
return j;
}

If the function names confuses you don't pay attention to them, but see
what they do.

So j++ return the old value of j , but increases j by 1, and ++j
increases first and then return the value of j.
-Thomas

Aug 3 '06 #4
arnuld schrieb:
i have just started to learn C++ from Bruce Eckel's book "Thinking in
C++ 2/e" & i am trying to understand the meaning of "j++". ++j is
pretty clear to me. i am using "g++" on my Debian Sarge.

here is the problem:

i = j = k = l = 0

++i ---i = 0 ;; OK, fine

j++ -j-- = 1 ;; WHAT?, why not 0

k++ -k++ = 1 ;; WHAT?, why not 2.

l-- = -l-- = -1 ;; why not -2
++j and j++ both do the same thing: They increment the variable j.

The difference is the _value_ of the expressions:

++j is called prefix-increment, it increments j and returns the
incremented value. So ++j equals the value of j after the increment
operation.

j-- is called postfix-increment. It increments j but its value is that
of j before the increment.

Example:

int j, a, b, c;

j = 0;
a = ++j; // a and j are 1
b = j++; // b is 1, but j is 2
c = j; // c is 2

--
Thomas
Aug 3 '06 #5
Thomas wrote:
arnuld wrote:
>i have just started to learn C++ from Bruce Eckel's book "Thinking in
C++ 2/e" & i am trying to understand the meaning of "j++". ++j is
pretty clear to me. i am using "g++" on my Debian Sarge.

here is the problem:

i = j = k = l = 0

++i ---i = 0 ;; OK, fine

j++ -j-- = 1 ;; WHAT?, why not 0

k++ -k++ = 1 ;; WHAT?, why not 2.

l-- = -l-- = -1 ;; why not -2

I searched archives but all i got is optimisations regarding the use
of ++j & j++ but not regarding meaning of these. does anybody have
any idea? Bruce did not explain this behaviour in his book (except
for a single sentence)

thanks

"arnuld"

This can be confusing, but is really easy!

The post increment operator like j++ maps to a funtion like this:

int operator++()
You meant

int int::operator++(int)

didn't you?
{
int tmp = j
;
j += 1;
return tmp;

}

And the pre incremend operator maps to a function like this:
int operator++(int)
You meant

int& int::operator++()

didn't you?
{
j += 1;
return j;
}

If the function names confuses you don't pay attention to them, but
see what they do.

So j++ return the old value of j , but increases j by 1, and ++j
increases first and then return the value of j.
Actually ++j returns _a reference_ to the old object 'j' with the new value.

V
--
Aug 3 '06 #6
2 Thomas-es are really great :-)

(i mean Thomas & Thomas J. Gritzen)

both explained in a very-easy way & i understood.

thanks.

"arnuld"

Aug 3 '06 #7
Victor Bazarov wrote:
We're in a C++ language newsgroup. The text above is not C++. Care
to explain what it is you mean by all those valid C++ tokens mixed up
in a strange order?
i thought of putting the entire programme but that could clutter the
post, that is why i used arrows.

BUT Victor, you are here from a long-time, so you know better. if you
say "always in the form of a programme" then i will do so. what do you
say?

"arnuld"

Aug 3 '06 #8
arnuld wrote:
Victor Bazarov wrote:
>We're in a C++ language newsgroup. The text above is not C++. Care
to explain what it is you mean by all those valid C++ tokens mixed up
in a strange order?

i thought of putting the entire programme but that could clutter the
post, that is why i used arrows.

BUT Victor, you are here from a long-time, so you know better. if you
say "always in the form of a programme" then i will do so. what do
you say?
We should strive to use two languages here: C++ and English. When I see

j++ -j++ = 1

what should I think? Yes, I've been here a while, so I can probably
guess that you meant

j++;
cout << j++; // outputs 1

but what somebody without enough experience should make of it? When you
post, you shouldn't just think that your questions are read (and well
understood) by somebody who is experienced. You should think of somebody
with less experience than yourself and make sure that both your question

BTW, was it so difficult to write

j++, cout << j++; // outputs 1 -- some comment

j++ -j++ = 1 ;; some comment

???

V
--
Aug 3 '06 #9
Victor Bazarov wrote:

We should strive to use two languages here: C++ and English.
hey, hey making fun of me by saying " and English" i like it :-)
When I see

j++ -j++ = 1

what should I think? Yes, I've been here a while, so I can probably
guess that you meant

j++;
cout << j++; // outputs 1
i meant:

int j = 0;
cout << j++ << endl;
cout << j++ << endl;

but what somebody without enough experience should make of it? When you
post, you shouldn't just think that your questions are read (and well
understood) by somebody who is experienced. You should think of somebody
with less experience than yourself and make sure that both your question
whoopy.....! I thought *I* was least experienced. WOW i am wrong.
BTW, was it so difficult to write

j++, cout << j++; // outputs 1 -- some comment

j++ -j++ = 1 ;; some comment
nope, i did write that. my mistake :-)
V
:-)

what do you mean by "top-posted replies". asking since i dont know.

"arnuld"

Aug 3 '06 #10

V

arnuld wrote:
Victor Bazarov wrote:
[..]
>
what do you mean by "top-posted replies". asking since i dont know.

"arnuld"

Aug 3 '06 #11
arnuld posted:
i am trying to understand the meaning of "j++".

The following two expressions perform the same action -- they increment the
object "j":

++j

j++

The difference between them only becomes apparent though if you use the
value of the expression:

(1) int i = ++j;

(2) int i = j++;

In the first example, "i" is set to the value which "j" has AFTER the
increment has been performed.

In the second example, "i" is set to the value which "j" has BEFORE the
increment has been performed.

An easy way to remember is to read from left to right. If we read "++j", we
see that the incrementation comes BEFORE. If we read "j++", we can see that
the incrementation comes AFTER.

++j is called the "pre-increment operator".

j++ is called the "post-increment operator".

Note however that these terms are ambiguous, as it isn't clear whether pre
means "before as you read from left-to-right", or "before as in: the value
is incremented before the expression is fully evaluated".

If you don't use the value of the expression, I would suggest you use:

++j

As it is consistent with the behaviour of other operators, such as:

j += 5;

j *= 7;

--

Frederick Gotham
Aug 3 '06 #12

### This discussion thread is closed

Replies have been disabled for this discussion.