meaning of j++

Discussion in 'C++' started by arnuld, Aug 3, 2006.

  1. arnuld

    arnuld Guest

    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"
    arnuld, Aug 3, 2006
    #1
    1. Advertising

  2. arnuld

    loufoque Guest

    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.
    loufoque, Aug 3, 2006
    #2
    1. Advertising

  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


    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
    --
    Please remove capital 'A's when replying by e-mail
    I do not respond to top-posted replies, please don't ask
    Victor Bazarov, Aug 3, 2006
    #3
  4. arnuld

    Thomas Guest

    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
    >
    >
    > 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
    Thomas, Aug 3, 2006
    #4
  5. 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
    Thomas J. Gritzan, Aug 3, 2006
    #5
  6. 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
    >>
    >>
    >> 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++()


    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
    --
    Please remove capital 'A's when replying by e-mail
    I do not respond to top-posted replies, please don't ask
    Victor Bazarov, Aug 3, 2006
    #6
  7. arnuld

    arnuld Guest

    2 Thomas-es are really great :)

    (i mean Thomas & Thomas J. Gritzen)

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

    thanks.

    "arnuld"
    arnuld, Aug 3, 2006
    #7
  8. arnuld

    arnuld Guest

    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"
    arnuld, Aug 3, 2006
    #8
  9. 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
    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
    --
    Please remove capital 'A's when replying by e-mail
    I do not respond to top-posted replies, please don't ask
    Victor Bazarov, Aug 3, 2006
    #9
  10. arnuld

    arnuld Guest

    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"
    arnuld, Aug 3, 2006
    #10
  11. This is a top-posted reply

    V

    arnuld wrote:
    > Victor Bazarov wrote:

    [..]
    >
    > what do you mean by "top-posted replies". asking since i dont know.
    >
    > "arnuld"
    Victor Bazarov, Aug 3, 2006
    #11
  12. 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
    Frederick Gotham, Aug 3, 2006
    #12
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Sander Odekerken

    Meaning of output value?

    Sander Odekerken, May 18, 2004, in forum: VHDL
    Replies:
    2
    Views:
    2,468
    John_H
    May 18, 2004
  2. Parthav
    Replies:
    4
    Views:
    1,875
    Mike Treseler
    Jan 13, 2006
  3. Frank

    Meaning of <%#

    Frank, Dec 30, 2003, in forum: ASP .Net
    Replies:
    4
    Views:
    568
  4. .NET Follower

    Meaning Of Timeout in FormsAuthentication???

    .NET Follower, Feb 6, 2004, in forum: ASP .Net
    Replies:
    0
    Views:
    360
    .NET Follower
    Feb 6, 2004
  5. Replies:
    4
    Views:
    751
Loading...

Share This Page