Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Special Interest Groups
  3. C++ Gurus
  4. How to ensure comparison operator is "complete"?
Forum Updated to NodeBB v4.3 + New Features

How to ensure comparison operator is "complete"?

Scheduled Pinned Locked Moved C++ Gurus
13 Posts 4 Posters 5.6k 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.
  • G Offline
    G Offline
    goetz
    wrote on last edited by
    #4

    How should any algorithm know whether a new attribute in your class is relevant for a comparison?

    Even if the answer in your case would be "any one is relevant", that would be out of the scope of a compiler. One would have to analyze the source code and then to analyze the operator== method.

    The method Andre did outline, works too. But it cannot handle the cases where your forgot to make the new attribute a property. So you're not gaining that much from that.

    For our projects, I just would add a HUGE comment at the place where the attributes are added in the header:

    @
    /************************

    • CAUTION!
    • if you add an attribute here
    • ADD IT TO THE comparison methods too!
      ************************/
      @

    :-)

    http://www.catb.org/~esr/faqs/smart-questions.html

    1 Reply Last reply
    0
    • A Offline
      A Offline
      Asperamanca
      wrote on last edited by
      #5

      I was afraid this would be the answer...

      well, one could hope.

      1 Reply Last reply
      0
      • G Offline
        G Offline
        goetz
        wrote on last edited by
        #6

        Yes, hope dies last :-)

        http://www.catb.org/~esr/faqs/smart-questions.html

        1 Reply Last reply
        0
        • A Offline
          A Offline
          andre
          wrote on last edited by
          #7

          Perhaps you can find a static code analysis tool that can warn for these cases?

          1 Reply Last reply
          0
          • A Offline
            A Offline
            Asperamanca
            wrote on last edited by
            #8

            Yes, I also thought this would be in the realm of static code analysis.
            If anyone knows about a static code analysis tool that can provide that, please speak up.

            1 Reply Last reply
            0
            • R Offline
              R Offline
              rwst
              wrote on last edited by
              #9

              Maybe this is a stupid question but do you need the operator==() for comparison?
              (edit:I meant to say, do you need == within the comparison?)
              It could be that it suffices for your application to compare the allocated memory
              blocks using sizeof(Class1/2) and memcmp()? OK, this is C not C++...

              1 Reply Last reply
              0
              • A Offline
                A Offline
                andre
                wrote on last edited by
                #10

                As the topic starter stated, he needs to do non-trival comparisons, like fuzzy comparisons of reals. That is never going to work with doing a memcmp. -Otherwise, relying on the default comparison operator would have been just as effective.-

                Edit: there is no such thing as a default comparison operator in C++, thanks for correcting me.

                1 Reply Last reply
                0
                • A Offline
                  A Offline
                  Asperamanca
                  wrote on last edited by
                  #11

                  [quote author="Andre" date="1333107436"]Rely on the automatically generated ones?[/quote]

                  Took me a while to notice...since when do automatically generated comparison operators exist?

                  1 Reply Last reply
                  0
                  • A Offline
                    A Offline
                    andre
                    wrote on last edited by
                    #12

                    [quote author="Asperamanca" date="1334563036"][quote author="Andre" date="1333107436"]Rely on the automatically generated ones?[/quote]

                    Took me a while to notice...since when do automatically generated comparison operators exist?

                    [/quote]

                    Sorry, you are right: they don't. I thought there were, but I was wrong on this count. I stand corrected.

                    StackOverflow has an interesting "discusson":http://stackoverflow.com/questions/217911/why-dont-c-compilers-define-operator-and-operator on the why (not) of automatic operator==() definition.

                    1 Reply Last reply
                    0
                    • A Offline
                      A Offline
                      Asperamanca
                      wrote on last edited by
                      #13

                      I think it's the same one I stumbled upon. ;-)

                      1 Reply Last reply
                      0

                      • Login

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • Users
                      • Groups
                      • Search
                      • Get Qt Extensions
                      • Unsolved