meaning of j++

A

arnuld

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


no i am not talking about efficiency/optimisation. i am talking about
the answers i got.

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"
 
V

Victor Bazarov

arnuld said:
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
 
T

Thomas

arnuld said:
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


no i am not talking about efficiency/optimisation. i am talking about
the answers i got.

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
 
T

Thomas J. Gritzan

arnuld said:
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
 
V

Victor Bazarov

Thomas said:
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::eek:perator++(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::eek:perator++()

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
 
A

arnuld

2 Thomas-es are really great :)

(i mean Thomas & Thomas J. Gritzen)

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

thanks.

"arnuld"
 
A

arnuld

Victor said:
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"
 
V

Victor Bazarov

arnuld said:
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
and the answers are clear.

BTW, was it so difficult to write

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

instead of

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

???

V
 
A

arnuld

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
and the answers are clear.

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

instead of

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

nope, i did write that. my mistake :)
V
:)


Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask


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

"arnuld"
 
F

Frederick Gotham

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;
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,480
Members
44,900
Latest member
Nell636132

Latest Threads

Top