• lysdexic@programming.devOPM
    link
    fedilink
    English
    arrow-up
    1
    ·
    11 months ago

    The most asinine thing i encountered is that the bracket operator on std::map writes 0 value if the key is not found.

    That’s a “you’re using it wrong” problem. The operator[] is designed to "Returns a reference to the value that is mapped to a key equivalent to key, performing an insertion if such key does not already exist. "

    The “0 value” just so happens to be the result you get from a default initializer whose default initialization corresponds to zero-initialization.

    If you want to use a std::map to access the element associated with a key, you need to either use at and handle an exception if no such key exists, or use find.

    • MadhuGururajan@programming.dev
      link
      fedilink
      arrow-up
      3
      ·
      edit-2
      11 months ago

      My point is that the design is wrong. Nobody expects [] as lvalue to update a value. Your argument is descriptive, mine is prespcriptive. I am saying that the C++ committee is wrong on this one (or whoever designed it this way)