何处可从C++标准查阅或推导vector<T>::operator[]越界访问为UB?
C++标准中std::vector::operator[]与at()的行为说明
对于
std::vector<T,Allocator>::operator[]:
C++标准草案明确规定,该运算符的合法调用前提是下标n满足n < size()。如果访问超出这个范围的元素(即不存在的元素),标准未定义该操作的行为——这直接对应cppreference里的表述,不需要额外推导,因为标准只对合法下标的情况做了行为约束,越界场景完全没有规范,属于典型的未定义行为(UB)。对于
std::vector<T,Allocator>::at():
标准里对这个成员函数有明确的异常处理规则:当访问的下标n >= size()时,at()必须抛出std::out_of_range异常。它的行为是完全确定的,和operator[]的核心差异就是边界检查:at()强制做检查并抛出异常,而operator[]为了性能省略了检查,越界直接触发UB。
内容的提问来源于stack exchange,提问作者Enlico
相关产品推荐
相关产品推荐

