我见过很多次std::string::operator[]没有做任何边界检查。甚至string::at 和 string::operator[] 有什么区别?,在 2013 年问,答案说operator[]不做任何边界检查。
我的问题是,如果我查看 [string.access] 中的标准(在本例中为草案 N3797),我们有
const_reference operator[](size_type pos) const; reference operator[](size_type pos);
- 要求:
pos <= size()。- 返回:
*(begin() + pos)如果pos < size()。否则,返回对charT具有 value类型的对象的引用charT(),其中修改对象会导致未定义的行为。- 抛出:什么都没有。
- 复杂性:恒定时间。
这使我相信operator[]必须进行某种边界检查以确定它是否需要返回 string 的元素或 default charT。这个假设是否正确并且operator[]现在需要进行边界检查?