繁体   English   中英

为什么我在std :: vector中使用索引超出范围的operator []时没有异常?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM