In C++11 and beyond does std::string::operator[] do bounds checking?

前端 未结 5 903
南笙
南笙 2020-12-16 10:02

I have seen many times that std::string::operator[] does not do any bounds checking. Even What is the difference between string::at and string::operator[]?, as

5条回答
  •  隐瞒了意图╮
    2020-12-16 10:32

    The wording is slightly confusing, but if you study it in detail you'll find that it's actually very precise.

    It says this:

    • The precondition is that the argument to [] is either = n or it's < n.
    • Assuming that precondition is satisfied:
      • If it's < n then you get the character you asked for.
      • "Otherwise" (i.e. if it's n) then you get charT() (i.e. the null character).

    But no rule is defined for when you break the precondition, and the check for = n can be satisfied implicitly (but isn't explicitly mandated to be) by actually storing a charT() at position n.

    So implementations don't need to perform any bounds checking… and the common ones won't.

提交回复
热议问题