C++ STL访问向量元素

bac*_*aci 2 c++ stl vector std

vector.at(i)和之间有什么区别vector[i]

vector<int> myVector(6);
myVector.at(5) = 5;
Run Code Online (Sandbox Code Playgroud)

要么

myVector[5] = 5;
Run Code Online (Sandbox Code Playgroud)

我知道两者都会产生相同的结果,但不知何故,运算符[]更快.我还读到了关于at向量大小(边界)的检查并返回超出范围的错误,而[]没有.

但是我看到如果尝试分配:

myVector[8] = 1;
Run Code Online (Sandbox Code Playgroud)

我在调试模式下得到类似的超出范围错误.

然后是什么意思at?为什么它在STL?

0x4*_*2D2 5

operator []for std::vector将返回对内存区域的引用,无论它是否为向量分配.访问未分配的内存区域是Undefined Behavior,而at在发生任何异常行为之前会抛出异常.正如@JoachimPileborg在评论中所说,未指明的行为operator []包括抛出异常.