• flying_gel@lemmy.world
    link
    fedilink
    arrow-up
    0
    ·
    1 month ago

    I do appreciate how newer C++ standards have made these kinds of things a lot easier too.

    Define all comparison operators with just one one line using C++20

    auto operator<=>(const ClassName&) const = default;

        • GetOffMyLan@programming.dev
          link
          fedilink
          arrow-up
          0
          ·
          1 month ago

          This argument just doesn’t hold up. Software written by some of the best developers in the world still has these same bugs.

          Why even use a language where you have to put so much effort into something that comes for free in many modern languages.

      • flying_gel@lemmy.world
        link
        fedilink
        arrow-up
        0
        ·
        1 month ago

        Maybe to a non C++ dev, but a lot of C++ is probably incomprehensible to a non C++ dev, just like there are other laguages that are incomprehensible to C++ devs. To me it makes perfect sense as it works just like all the other operator overloads.

        auto - let the compiler deduce return type

        operator<=> - override the spaceship operator (pretty sure it exists in python too)

        (const ClassName&) - compare this class, presumably defined in Class name, with a const reference of type Class name, i.e. its own type.

        const - comparison can be made for const objects

        = default; - Use the default implementation, which is comparing all the member variables.

        An alternate more explicit version, which is actually what people recommend:

        auto operator<=>(const ClassName&, const ClassName&) = default;

        if I just want to have less than comparison for example I would:

        This one makes it explicit that you’re comparing two Class name objects.

        if I just want to have less than comparison for example I would:

        auto operator<(const ClassName&, const ClassName&) = default;

        If I need to compare against another class I could define: auto operator<(const ClassName&, const OtherClass&)

      • tetris11@lemmy.ml
        link
        fedilink
        arrow-up
        0
        ·
        1 month ago

        You just need to break the syntax apart and look at it from the LHS and the RHS seperately.

        In layman’s terms: constantine felt boxed in by his social class which left him often at dagger-ends to the operations on his car. Unable to keep up with the constant payments, he defaulted on the loan.

        See? Easy.

    • xor@lemmy.blahaj.zone
      link
      fedilink
      English
      arrow-up
      0
      ·
      1 month ago

      It’s nice that this exists these days, but my god is it horrendously unreadable at a glance

      • Ephera@lemmy.ml
        link
        fedilink
        arrow-up
        0
        ·
        1 month ago

        It makes it look like they’re just adding random noise to avoid colliding with existing syntax. Maybe they can try a UUID next time…

        • flying_gel@lemmy.world
          link
          fedilink
          arrow-up
          0
          ·
          1 month ago

          It makes perfect sense actually. I did write another comment here if you are interested.

          This is how operator overloads were written going back to the initial version of C++ back in 1985. The only new thing is that we can now add = default to get the compiler to generate a default implementation that compares all the member variables for you.

    • qaz@lemmy.world
      link
      fedilink
      English
      arrow-up
      0
      ·
      edit-2
      1 month ago

      Is there a way to avoid having to write copy and move twice every time yet?