• @kornel
    link
    6
    edit-2
    1 year ago

    I don’t know about C++, but in Rust the push is inline, and still doesn’t always optimize checks away due to an annoying edge case: integer overflow. Reserving (old_len + new_len) could give you a smaller buffer than new_len. The optimizer sees it and is pedantic about it.

    • @robinm
      link
      11 year ago

      In C++ integer overflow is UB so this edge case cannot exist

      • @kornel
        link
        31 year ago

        Only signed overflow. size_t is unsigned.

        • @robinm
          link
          1
          edit-2
          1 year ago

          That’s totally right but I thought you were talking about signed numbers since you said “integer overflow”. I forgot that len is usually unsigned in C++.