Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. Other Discussions
  3. The Weird and The Wonderful
  4. Fun with pointers in C++

Fun with pointers in C++

Scheduled Pinned Locked Moved The Weird and The Wonderful
c++question
33 Posts 16 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T TheGreatAndPowerfulOz

    James Curran wrote:

    The longer version I posted will produce the exact same object code.

    Will it? The version you and I just discussed has the advantage of short-circuiting, where the first version you posted does not. Which is a "limitation" you pointed-out.

    #SupportHeForShe

    If your actions inspire others to dream more, learn more, do more and become more, you are a leader.-John Q. Adams You must accept 1 of 2 basic premises: Either we are alone in the universe or we are not alone. Either way, the implications are staggering!-Wernher von Braun Only 2 things are infinite, the universe and human stupidity, and I'm not sure about the former.-Albert Einstein

    J Offline
    J Offline
    James Curran
    wrote on last edited by
    #21

    I was referring to the second version I posted (i.e., "the longer version", the one with nested if()s). And that does produce identical object code. From VisualStudio 2013, Release build: Mine:

    ; 21 : void Method2()
    ; 22 : {
    ; 23 : A* pa = GetA();

    00023 e8 00 00 00 00 call ?GetA@@YAPAHXZ ; GetA
    00028 8b f0 mov esi, eax

    ; 24 : if (pa != NULL)

    0002a 85 f6 test esi, esi
    0002c 74 0d je SHORT $LN6@wmain

    ; 25 : {
    ; 26 : B* pb = GetB();

    0002e e8 00 00 00 00 call ?GetB@@YAPAHXZ ; GetB

    ; 27 : if (pb != NULL)

    00033 85 c0 test eax, eax
    00035 74 04 je SHORT $LN6@wmain

    ; 28 : *pa = *pb;

    00037 8b 08 mov ecx, DWORD PTR [eax]
    00039 89 0e mov DWORD PTR [esi], ecx
    $LN6@wmain:

    ; 29 : }
    ; 30 : }

    and yours:

    ; 32 : void Method3()
    ; 33 : {
    ; 34 : A* a;
    ; 35 : B* b;
    ; 36 : if ((a = GetA()) && (b = GetB()))

    0003b e8 00 00 00 00 call ?GetA@@YAPAHXZ ; GetA
    00040 8b f0 mov esi, eax
    00042 85 f6 test esi, esi
    00044 74 0d je SHORT $LN13@wmain
    00046 e8 00 00 00 00 call ?GetB@@YAPAHXZ ; GetB
    0004b 85 c0 test eax, eax
    0004d 74 04 je SHORT $LN13@wmain

    ; 37 : {
    ; 38 : *a = *b;

    0004f 8b 08 mov ecx, DWORD PTR [eax]
    00051 89 0e mov DWORD PTR [esi], ecx
    $LN13@wmain:

    That's with all standard "Release mode" optimizations on, except "Whole Program Optimization" (to prevent it from inlining GetA & GetB)

    Truth, James

    T 1 Reply Last reply
    0
    • J James Curran

      I was referring to the second version I posted (i.e., "the longer version", the one with nested if()s). And that does produce identical object code. From VisualStudio 2013, Release build: Mine:

      ; 21 : void Method2()
      ; 22 : {
      ; 23 : A* pa = GetA();

      00023 e8 00 00 00 00 call ?GetA@@YAPAHXZ ; GetA
      00028 8b f0 mov esi, eax

      ; 24 : if (pa != NULL)

      0002a 85 f6 test esi, esi
      0002c 74 0d je SHORT $LN6@wmain

      ; 25 : {
      ; 26 : B* pb = GetB();

      0002e e8 00 00 00 00 call ?GetB@@YAPAHXZ ; GetB

      ; 27 : if (pb != NULL)

      00033 85 c0 test eax, eax
      00035 74 04 je SHORT $LN6@wmain

      ; 28 : *pa = *pb;

      00037 8b 08 mov ecx, DWORD PTR [eax]
      00039 89 0e mov DWORD PTR [esi], ecx
      $LN6@wmain:

      ; 29 : }
      ; 30 : }

      and yours:

      ; 32 : void Method3()
      ; 33 : {
      ; 34 : A* a;
      ; 35 : B* b;
      ; 36 : if ((a = GetA()) && (b = GetB()))

      0003b e8 00 00 00 00 call ?GetA@@YAPAHXZ ; GetA
      00040 8b f0 mov esi, eax
      00042 85 f6 test esi, esi
      00044 74 0d je SHORT $LN13@wmain
      00046 e8 00 00 00 00 call ?GetB@@YAPAHXZ ; GetB
      0004b 85 c0 test eax, eax
      0004d 74 04 je SHORT $LN13@wmain

      ; 37 : {
      ; 38 : *a = *b;

      0004f 8b 08 mov ecx, DWORD PTR [eax]
      00051 89 0e mov DWORD PTR [esi], ecx
      $LN13@wmain:

      That's with all standard "Release mode" optimizations on, except "Whole Program Optimization" (to prevent it from inlining GetA & GetB)

      Truth, James

      T Offline
      T Offline
      TheGreatAndPowerfulOz
      wrote on last edited by
      #22

      Interesting. Thanks.

      #SupportHeForShe

      If your actions inspire others to dream more, learn more, do more and become more, you are a leader.-John Q. Adams You must accept 1 of 2 basic premises: Either we are alone in the universe or we are not alone. Either way, the implications are staggering!-Wernher von Braun Only 2 things are infinite, the universe and human stupidity, and I'm not sure about the former.-Albert Einstein

      1 Reply Last reply
      0
      • D Daniel Pfeffer

        C3D1 wrote:

        Returning references would make it much harder to read

        We'll just have to agree to disagree on that. IMO, this is a quite useful C++ paradigm.

        If you have an important point to make, don't try to be subtle or clever. Use a pile driver. Hit the point once. Then come back and hit it again. Then hit it a third time - a tremendous whack. --Winston Churchill

        K Offline
        K Offline
        KP Lee
        wrote on last edited by
        #23

        Daniel Pfeffer wrote:

        IMO, this is a quite useful C++ paradigm.

        ...and that makes me even happier to barely being able to read C++ :laugh:

        D 1 Reply Last reply
        0
        • K KP Lee

          Daniel Pfeffer wrote:

          IMO, this is a quite useful C++ paradigm.

          ...and that makes me even happier to barely being able to read C++ :laugh:

          D Offline
          D Offline
          Daniel Pfeffer
          wrote on last edited by
          #24

          De gustibus non est disputandum :)

          If you have an important point to make, don't try to be subtle or clever. Use a pile driver. Hit the point once. Then come back and hit it again. Then hit it a third time - a tremendous whack. --Winston Churchill

          K B 2 Replies Last reply
          0
          • D Daniel Pfeffer

            De gustibus non est disputandum :)

            If you have an important point to make, don't try to be subtle or clever. Use a pile driver. Hit the point once. Then come back and hit it again. Then hit it a third time - a tremendous whack. --Winston Churchill

            K Offline
            K Offline
            KP Lee
            wrote on last edited by
            #25

            That's what I like about this forum. You go in thinking programming and you get a bit of Latin training. Hope I remember what the phrase means next time I see it.

            D 1 Reply Last reply
            0
            • K KP Lee

              That's what I like about this forum. You go in thinking programming and you get a bit of Latin training. Hope I remember what the phrase means next time I see it.

              D Offline
              D Offline
              Daniel Pfeffer
              wrote on last edited by
              #26

              Me too. There are plenty of sites around that merely answer programming questions, but only a few with the range of highly intelligent, humorous, and opinionated contributors that you find here. Amazingly, the amount of sniping and backbiting is kept to a minimum! Long may it last!

              If you have an important point to make, don't try to be subtle or clever. Use a pile driver. Hit the point once. Then come back and hit it again. Then hit it a third time - a tremendous whack. --Winston Churchill

              G K 2 Replies Last reply
              0
              • D Daniel Pfeffer

                Me too. There are plenty of sites around that merely answer programming questions, but only a few with the range of highly intelligent, humorous, and opinionated contributors that you find here. Amazingly, the amount of sniping and backbiting is kept to a minimum! Long may it last!

                If you have an important point to make, don't try to be subtle or clever. Use a pile driver. Hit the point once. Then come back and hit it again. Then hit it a third time - a tremendous whack. --Winston Churchill

                G Offline
                G Offline
                grralph1
                wrote on last edited by
                #27

                Beautifully expressed and I agree totally.

                "Rock journalism is people who can't write interviewing people who can't talk for people who can't read." Frank Zappa 1980

                1 Reply Last reply
                0
                • D Daniel Pfeffer

                  Me too. There are plenty of sites around that merely answer programming questions, but only a few with the range of highly intelligent, humorous, and opinionated contributors that you find here. Amazingly, the amount of sniping and backbiting is kept to a minimum! Long may it last!

                  If you have an important point to make, don't try to be subtle or clever. Use a pile driver. Hit the point once. Then come back and hit it again. Then hit it a third time - a tremendous whack. --Winston Churchill

                  K Offline
                  K Offline
                  KP Lee
                  wrote on last edited by
                  #28

                  Daniel Pfeffer wrote:

                  Amazingly, the amount of sniping and backbiting is kept to a minimum!

                  Hear Hear (Or is that Here Here? :laugh: ) Sometimes I find myself biting my tongue, but not on this thread. (Yet, and this thread is starting to grow a beard)

                  1 Reply Last reply
                  0
                  • M Mario Vernari

                    In two hours you can have a great lunch, jogging, some fun with your partner, some nice song listening/playing and also a shower. All that cannot be done because the language is cryptic: that's why I hate C/C++! Good post, though...

                    K Offline
                    K Offline
                    KP Lee
                    wrote on last edited by
                    #29

                    Mario Vernari wrote:

                    that's why I hate C/C++!

                    Yea, I kind of agree with that sentiment, however, I have yet to run across the language that will supply me with a great lunch, but I do admit to sometimes having fun with it. (Does that mean I'm cheating on my partner?)

                    1 Reply Last reply
                    0
                    • M Mario Vernari

                      In two hours you can have a great lunch, jogging, some fun with your partner, some nice song listening/playing and also a shower. All that cannot be done because the language is cryptic: that's why I hate C/C++! Good post, though...

                      K Offline
                      K Offline
                      KP Lee
                      wrote on last edited by
                      #30

                      Mario Vernari wrote:

                      that's why I hate C/C++!

                      Yea, I kind of agree with that sentiment, however, I have yet to run across the language that will supply me with a great lunch, but I do admit to sometimes having fun with it. (Not C++ and does that mean I'm cheating on my partner?)

                      1 Reply Last reply
                      0
                      • D Daniel Pfeffer

                        De gustibus non est disputandum :)

                        If you have an important point to make, don't try to be subtle or clever. Use a pile driver. Hit the point once. Then come back and hit it again. Then hit it a third time - a tremendous whack. --Winston Churchill

                        B Offline
                        B Offline
                        Bernhard Hiller
                        wrote on last edited by
                        #31

                        Daniel Pfeffer wrote:

                        De gustibus non est disputandum :)

                        I.e. C++ is the Durian (stinkfruit) in Software Development.

                        1 Reply Last reply
                        0
                        • D Daniel Pfeffer

                          C3D1 wrote:

                          Returning references would make it much harder to read

                          We'll just have to agree to disagree on that. IMO, this is a quite useful C++ paradigm.

                          If you have an important point to make, don't try to be subtle or clever. Use a pile driver. Hit the point once. Then come back and hit it again. Then hit it a third time - a tremendous whack. --Winston Churchill

                          R Offline
                          R Offline
                          Rob Grainger
                          wrote on last edited by
                          #32

                          I agree, but I definitely would not name such a function "GetA".

                          "If you don't fail at least 90 percent of the time, you're not aiming high enough." Alan Kay.

                          1 Reply Last reply
                          0
                          • C C3D1

                            Sorry, that's not my code, an i cant change it. I just saw it in some code and where surprised what's that :D Returning references would make it much harder to read:

                            GetA() = GetB()

                            looks like What the hell? Assignment to a Function? :omg: :wtf:

                            L Offline
                            L Offline
                            Luiz Monad
                            wrote on last edited by
                            #33

                            You can't read C++ code without knowing the types. Who knows if equals was overridden, everything could happen. Even then you should read, GetA() return something, then operator = is called on this something.

                            1 Reply Last reply
                            0
                            Reply
                            • Reply as topic
                            Log in to reply
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes


                            • Login

                            • Don't have an account? Register

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Categories
                            • Recent
                            • Tags
                            • Popular
                            • World
                            • Users
                            • Groups