为什么当我使用下面的代码时不会超出范围?
std::vector<int> v;
v.resize(12);
int t;
try {
t = v[12];
} catch(std::exception e){
std::cout<<"error:"<<e.what()<<"\n";
}
Run Code Online (Sandbox Code Playgroud)
Dav*_*men 14
通过使用operator[]你基本上告诉编译器"我知道我在做什么.相信我." 如果你访问一些在数组之外的元素,那就是你的错.你违背了这种信任; 你不知道你在做什么.
另一种方法是使用该at()方法.在这里,您要求编译器对您的访问进行健全性检查.如果他们超出界限你会得到一个例外.
这种健全性检查可能很昂贵,特别是如果它是在一些深度嵌套的循环中完成的.如果您知道指数将始终处于界限内,则没有理由进行这些健全性检查.有一个不做那些健全性检查的界面真好.
制作operator[]不执行检查的原因是因为这正是[]原始数组和指针的工作原理.在C/C++中没有用于访问原始数组/指针的健全性检查.如果需要,检查是否负担.