• tunetardis@lemmy.ca
    link
    fedilink
    English
    arrow-up
    2
    ·
    2 years ago

    That’s fascinating.

    NVRO being optional annoys me. I’m always debating whether I should std::move the return value just in case, but if the compiler performs NVRO (which it probably does), this may be a pessimization right? Ugh.

    • perivesta@feddit.de
      link
      fedilink
      English
      arrow-up
      2
      ·
      edit-2
      2 years ago

      I think you should never std::move return values. Afaik every modern compiler does NRVO and manually moving prevents it. And on the offchance you need to use a compiler that optimizes less, that one copy most likely is the least of the performance concerns.

      • tunetardis@lemmy.ca
        link
        fedilink
        English
        arrow-up
        1
        ·
        2 years ago

        Afaik every modern compiler does NRVO and manually moving prevents it.

        Yeah this is what bothers me. std::move could make things worse, but not if the alternative is a copy. But you’re probably right that any self-respecting compiler nowadays would do NRVO.

    • gracicotOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      2 years ago

      I think compiler move return value by default, so even without NRVO you should never move a return value when it’s a local non reference variable.

      • tunetardis@lemmy.ca
        link
        fedilink
        English
        arrow-up
        1
        ·
        2 years ago

        Well the test3 example FTA gives a case where NRVO would not happen because of the conditional return value. Are you suggesting that you need not std::move even in this case?

        • gracicotOP
          link
          fedilink
          English
          arrow-up
          1
          ·
          2 years ago

          I would still say “no” since they are local objects and they are gonna be moved from implicitly anyway