this post was submitted on 24 Dec 2023
18 points (84.6% liked)

C++

1755 readers
1 users here now

The center for all discussion and news regarding C++.

Rules

founded 1 year ago
MODERATORS
18
C++ Should Be C++ (www.open-std.org)
submitted 10 months ago by lysdexic to c/cpp
you are viewing a single comment's thread
view the rest of the comments
[–] MadhuGururajan 2 points 10 months ago* (last edited 10 months ago) (1 children)

I am trying C++ for this year's advent of code. The most asinine thing i encountered is that the bracket operator on std::map writes 0 value if the key is not found. So your code doesn't compile if you declare a const map or a const map reference as a function parameter. Compiler fails with "discards const qualifier on argument".

I mean, wtf?

Edit: this is probably true for other STL containers

[–] lysdexic 1 points 10 months ago (1 children)

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 3 points 9 months ago* (last edited 9 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)