[英]Why "operator<" for std::vector<int>::iterator seems to compare absolute values when out of range (before .begin())?
[英]Why I don't get an exception when using operator [] with index out of range in std::vector?
为什么当我使用下面的代码时,我没有超出范围异常?
std::vector<int> v;
v.resize(12);
int t;
try {
t = v[12];
} catch(std::exception e){
std::cout<<"error:"<<e.what()<<"\n";
}
通过使用operator[]
你基本上是在告诉编译器“我知道我在做什么。相信我。” 如果你访问一些在数组之外的元素,那就是你的错。 你违背了这种信任; 你不知道你在做什么。
另一种方法是使用at()
方法。 在这里,您要求编译器对您的访问进行健全性检查。 如果他们超出界限,你会得到一个例外。
这种健全性检查可能很昂贵,特别是如果它是在一些深度嵌套的循环中完成的。 如果您知道指数将始终处于界限内,则没有理由进行这些健全性检查。 有一个不做那些健全性检查的界面真好。
使operator[]
成为不执行检查的原因是因为这正是[]
对原始数组和指针的作用。 在C / C ++中没有用于访问原始数组/指针的健全性检查。 如果需要,检查是否负担。
operator[]
不会抛出异常。 对该行为使用at()
函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.