I have seen many times that std::string::operator[] does not do any bounds checking. Even In C++, what is the difference between string::at and string::operator[]?, asked in 2013, the answers say that operator[] does not do any bounds checking.
My issue with this is if I look at the standard(in this case draft N3797) in [string.access] we have
const_reference operator[](size_type pos) const; reference operator[](size_type pos);
- Requires:
pos <= size().- Returns:
*(begin() + pos)ifpos < size(). Otherwise, returns a reference to an object of typecharTwith valuecharT(), where modifying the object leads to undefined behavior.- Throws: Nothing. 4.* Complexity:* constant time.
This leads me to believe that operator[] has do some sort of bounds checking to determine if it needs to return a element of the string or a default charT. Is this assumption correct and operator[] is now required to do bounds checking?
Aucun commentaire:
Enregistrer un commentaire