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.
  • J James Curran

    That does work, but

    if (a = GetA()) ...

    is too easy to mistake for

    if (a == GetA()) ...

    Which is why I never leave the comparison implied, so we get:

    if ((a = GetA()) != NULL && (b = GetB()) != NULL)

    which is rather unwieldy. And for what purpose? The longer version I posted will produce the exact same object code.

    Truth, James

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

    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 1 Reply Last reply
    0
    • 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