通过operator []和.at()

时间:2016-12-15 05:35:23

标签: c++ c++11 vector stl indexoutofboundsexception

vector<int> input = {1, 2, 3, 4, 17, 117, 517, 997};
cout<< "input vector at index -1 is: " << input[-1] <<endl;

使用上面的代码,结果将是:索引-1处的输入为:0。 但是,如果我们使用follwoing:

vector<int> input = {1, 2, 3, 4, 17, 117, 517, 997};
cout<< "input vector at index -1 is: " << input.at(-1) <<endl;

结果将是: 索引-1处的输入是:libc ++ abi.dylib:以std :: out_of_range类型的未捕获异常终止:vector。

有人可以向我解释原因吗?谢谢。

2 个答案:

答案 0 :(得分:9)

at成员会进行范围检查并做出适当的响应。

operator []没有。这是未定义的行为和代码中的错误。

这在文档中明确说明。

答案 1 :(得分:3)

第一个是未定义的行为。什么事情都可能发生。无论发生什么事,都不允许抱怨。

第二个,抛出一个异常并且你没有捕获它,因此调用std::terminate()并且你的程序死了。结束。