我见过很多次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[]
现在需要进行边界检查?