i++ or ++i ?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • John Brawley

    i++ or ++i ?

    Please pardon a maybe very stupid question?
    I've read and reread Bjarne Stroustrup on this, and I still don't "get it,"
    so I wrote this to help me understand, and now I _really_ don't "get it."
    Why, if one increments before, and the other after, do these snippets output
    exactly the same?


    #include <iostream>

    int main() {
    for(int i=0; i<10; i++)
    std::cout<<i<<" , ";
    std::cout<<"\n" ;
    for(int i=0;i<10;++i)
    std::cout<<i<<" , ";
    std::cout<<"\n" ;
    int b=7;
    b++; std::cout<<b;
    int c=7;
    ++c; std::cout<<"\n" <<c;
    //????????? why? same outputs!
    return 0;
    }

    _Same_output_.
    What's the difference?
    (I use these in a program, which doesn't crash....)


    --
    Peace
    JB
    jb@tetrahedrave rse.com
    Web: http://tetrahedraverse.com



  • fred.l.kleinschmidt@boeing.com

    #2
    Re: i++ or ++i ?

    On Feb 8, 11:00 am, "John Brawley" <jgbraw...@char ter.netwrote:
    Please pardon a maybe very stupid question?
    I've read and reread Bjarne Stroustrup on this, and I still don't "get it,"
    so I wrote this to help me understand, and now I _really_ don't "get it."
    Why, if one increments before, and the other after, do these snippets output
    exactly the same?
    >
    #include <iostream>
    >
    int main() {
    for(int i=0; i<10; i++)
    std::cout<<i<<" , ";
    std::cout<<"\n" ;
    for(int i=0;i<10;++i)
    std::cout<<i<<" , ";
    std::cout<<"\n" ;
    int b=7;
    b++; std::cout<<b;
    int c=7;
    ++c; std::cout<<"\n" <<c;
    //?????????  why?  same outputs!
    return 0;
    >
    }
    >
    _Same_output_.
    What's the difference?
    (I use these in a program, which doesn't crash....)
    >
    Try this and see:

    int b=7;
    std::cout << b++ <<endl;
    int c=7;
    std::cout << ++c << endl;
    --
    Fred Kleinschmidt

    Comment

    • Hans Mull

      #3
      Re: i++ or ++i ?

      John Brawley schrieb:
      Please pardon a maybe very stupid question?
      I've read and reread Bjarne Stroustrup on this, and I still don't "get it,"
      so I wrote this to help me understand, and now I _really_ don't "get it."
      Why, if one increments before, and the other after, do these snippets output
      exactly the same?
      >
      >
      #include <iostream>
      >
      int main() {
      for(int i=0; i<10; i++)
      std::cout<<i<<" , ";
      std::cout<<"\n" ;
      for(int i=0;i<10;++i)
      std::cout<<i<<" , ";
      std::cout<<"\n" ;
      int b=7;
      b++; std::cout<<b;
      int c=7;
      ++c; std::cout<<"\n" <<c;
      //????????? why? same outputs!
      return 0;
      }
      >
      _Same_output_.
      What's the difference?
      (I use these in a program, which doesn't crash....)
      >
      >
      Maybe it will help you do define the difference between ++i and i++;

      The statements do the same with one difference:
      The value of the statement "++i" is i+1
      while the value of i++ is i:

      #include <iostream>
      using namespace std;

      int main()
      {
      int i=6;
      cout << "i++: " << i++ << endl; //Will return i = 6
      int j=6;
      cout << "++i: " << ++i << endl; //Will return i+1 = 7
      return 0;
      }

      I hope this will help you!

      Kind regards, Hans

      Comment

      • Ioannis Vranos

        #4
        Re: i++ or ++i ?

        John Brawley wrote:
        Please pardon a maybe very stupid question?
        I've read and reread Bjarne Stroustrup on this, and I still don't "get it,"
        so I wrote this to help me understand, and now I _really_ don't "get it."
        Why, if one increments before, and the other after, do these snippets output
        exactly the same?
        >
        >
        #include <iostream>
        >
        int main() {
        for(int i=0; i<10; i++)
        std::cout<<i<<" , ";
        std::cout<<"\n" ;
        for(int i=0;i<10;++i)
        std::cout<<i<<" , ";
        std::cout<<"\n" ;
        int b=7;
        b++; std::cout<<b;
        int c=7;
        ++c; std::cout<<"\n" <<c;
        //????????? why? same outputs!
        return 0;
        }
        >
        _Same_output_.
        What's the difference?
        (I use these in a program, which doesn't crash....)

        Along the answers of the others, my advice is, read a good introductory
        C++ book cover to cover, before reading "The C++ Programming Language"
        3rd Edition or Special Edition cover to cover.

        Comment

        • Pascal Bourguignon

          #5
          Re: i++ or ++i ?

          Hans Mull <deyringer@goog lemail.comwrite s:
          [...]
          You can directly print them via cout:
          cout << ++i;
          cout << i++;
          Yes, but if you want to see non-puzzling results, you'd better use two
          variables:

          int i=0;cout<<"++i = "<<++i<<end l;
          int j=0;cout<<"j++ = "<<j++<<end l;

          --
          __Pascal Bourguignon__ http://www.informatimago.com/
          The mighty hunter
          Returns with gifts of plump birds,
          Your foot just squashed one.

          Comment

          • acehreli@gmail.com

            #6
            Re: i++ or ++i ?

            On Feb 8, 2:59 pm, "John Brawley" <jgbraw...@char ter.netwrote:
            Andrey wrote:
            >
            the
            result of '++i' expression is the "new" value of 'i' (the value "after"
            the increment), while the result of 'i++' expression is the "old" value
            of 'i' (the value "before" the increment).
            (I'll thank y'all even one more when I finally understand this permanently.)
            A common description of the differences between the two is

            ++i increments i before
            i++ increments i after

            Unfortunately that definition works only in C. There is a better
            description that works in both languages:

            ++i increments i and uses i
            i++ takes a copy of i, increments i, and uses the copy

            Daniel T.'s recommendation of looking at the implementation is helpful
            in seeing this. So, here is how it boils down:

            foo(++i) is the same thing as

            ++i;
            foo(i);

            On the other hand, foo(i++) is the same thing as

            const int compiler_genera ted_temp = i;
            ++i;
            foo(compiler_ge nerated_temp);

            Ali

            Comment

            • Ioannis Vranos

              #7
              Re: i++ or ++i ?

              John Brawley wrote:
              >
              (Oh, one last: I do appreciate the recommendation to read a good book on C++
              Actually: "A good *introductory* book on C++".

              "The C++ Programming Language" 3rd Edition or Special Edition is an
              excellent book itself, better suited to intermediate C++ programmers IMHO.

              Comment

              • John Brawley

                #8
                Re: i++ or ++i ?


                "Ioannis Vranos" <ivranos@nospam .no.spamfreemai l.grwrote in message
                news:foiq23$t7a $2@ulysses.noc. ntua.gr...
                John Brawley wrote:
                >

                (Oh, one last: I do appreciate the recommendation to read a good book on
                C++
                >
                Actually: "A good *introductory* book on C++".
                >
                "The C++ Programming Language" 3rd Edition or Special Edition is an
                excellent book itself, better suited to intermediate C++ programmers IMHO.
                I take your point, and would certainly agree, for any newbie who was trying
                to *learn to program* in C++. However, my case was/is different: I was
                trying (well, past tense; I've already succeeded) to *write a program* in
                C++.
                Those are actually, if you think about it, very different motivations
                driving perhaps equally different paths and needs. Having never done so
                before, one can pick up an oboe and in a while learn to play one piece (say,
                "Stranger on the Shore" --Acker Bilk) on it rather indistinguishab ly from a
                musician, but if asked to play a different piece, nothing but squawks might
                emerge. (*g*)
                I had *used* all this code to get something working. I didn't necessarily
                _understand_ why or how it worked in every case (especially this ++i / i++
                case), but no matter: the program does exactly what I wanted it to.


                --
                Peace
                JB
                jb@tetrahedrave rse.com
                Web: http://tetrahedraverse.com



                Comment

                • Ioannis Vranos

                  #9
                  Re: i++ or ++i ?

                  John Brawley wrote:
                  "Ioannis Vranos" <ivranos@nospam .no.spamfreemai l.grwrote in message
                  news:foiq23$t7a $2@ulysses.noc. ntua.gr...
                  >John Brawley wrote:
                  >>
                  >>(Oh, one last: I do appreciate the recommendation to read a good book on
                  C++
                  >Actually: "A good *introductory* book on C++".
                  >>
                  >"The C++ Programming Language" 3rd Edition or Special Edition is an
                  >excellent book itself, better suited to intermediate C++ programmers IMHO.
                  >
                  I take your point, and would certainly agree, for any newbie who was trying
                  to *learn to program* in C++. However, my case was/is different: I was
                  trying (well, past tense; I've already succeeded) to *write a program* in
                  C++.
                  Those are actually, if you think about it, very different motivations
                  driving perhaps equally different paths and needs. Having never done so
                  before, one can pick up an oboe and in a while learn to play one piece (say,
                  "Stranger on the Shore" --Acker Bilk) on it rather indistinguishab ly from a
                  musician, but if asked to play a different piece, nothing but squawks might
                  emerge. (*g*)
                  I had *used* all this code to get something working. I didn't necessarily
                  _understand_ why or how it worked in every case (especially this ++i / i++
                  case), but no matter: the program does exactly what I wanted it to.

                  OK it is up to you to decide what you need, but if you had read a good
                  introductory C++ book, I think you would have understood the difference
                  between i++ and ++i in the first place. :-)

                  Comment

                  • John Brawley

                    #10
                    Re: i++ or ++i ?


                    "Ioannis Vranos" <ivranos@nospam .no.spamfreemai l.grwrote in message
                    news:foitob$160 c$1@ulysses.noc .ntua.gr...
                    John Brawley wrote:
                    "Ioannis Vranos" <ivranos@nospam .no.spamfreemai l.grwrote in message
                    news:foiq23$t7a $2@ulysses.noc. ntua.gr...
                    John Brawley wrote:
                    >
                    >(Oh, one last: I do appreciate the recommendation to read a good book
                    on
                    C++
                    Actually: "A good *introductory* book on C++".
                    >
                    "The C++ Programming Language" 3rd Edition or Special Edition is an
                    excellent book itself, better suited to intermediate C++ programmers
                    IMHO.

                    I take your point, and would certainly agree, for any newbie who was
                    trying
                    to *learn to program* in C++. However, my case was/is different: I was
                    trying (well, past tense; I've already succeeded) to *write a program*
                    in
                    C++.
                    Those are actually, if you think about it, very different motivations
                    driving perhaps equally different paths and needs. Having never done so
                    before, one can pick up an oboe and in a while learn to play one piece
                    (say,
                    "Stranger on the Shore" --Acker Bilk) on it rather indistinguishab ly
                    from a
                    musician, but if asked to play a different piece, nothing but squawks
                    might
                    emerge. (*g*)
                    I had *used* all this code to get something working. I didn't
                    necessarily
                    _understand_ why or how it worked in every case (especially this ++i /
                    i++
                    case), but no matter: the program does exactly what I wanted it to.
                    >
                    >
                    OK it is up to you to decide what you need, but if you had read a good
                    introductory C++ book, I think you would have understood the difference
                    between i++ and ++i in the first place. :-)
                    Doubtless I would have.
                    Thank you for the kind advice.
                    I often play on grounds for which I am not qualified.
                    So far, no serious injuries....
                    (*grin*)


                    --
                    Peace
                    JB
                    jb@tetrahedrave rse.com
                    Web: http://tetrahedraverse.com



                    Comment

                    • James Kanze

                      #11
                      Re: i++ or ++i ?

                      On Feb 9, 12:51 am, acehr...@gmail. com wrote:
                      On Feb 8, 2:59 pm, "John Brawley" <jgbraw...@char ter.netwrote:
                      A common description of the differences between the two is
                      ++i increments i before
                      i++ increments i after
                      Unfortunately that definition works only in C. There is a better
                      description that works in both languages:
                      ++i increments i and uses i
                      i++ takes a copy of i, increments i, and uses the copy
                      And what's the difference between the two descriptions?

                      An expression has two characteristics : its side effects, and its
                      value. The side effects of the two expressions are the same.
                      The value is different. If you don't use the value, there's
                      (conceptually, at least) no value.

                      If you're writing a user defined ++, of course, and you want to
                      make it behave like the built in one (always a good idea), then
                      taking a copy before incrementing is usually the simplest way.

                      --
                      James Kanze (GABI Software) email:james.kan ze@gmail.com
                      Conseils en informatique orientée objet/
                      Beratung in objektorientier ter Datenverarbeitu ng
                      9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

                      Comment

                      Working...