You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

何处可从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 15:27:00