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。
有人可以向我解释原因吗?谢谢。
答案 0 :(得分:9)
at
成员会进行范围检查并做出适当的响应。
operator []
没有。这是未定义的行为和代码中的错误。
这在文档中明确说明。
答案 1 :(得分:3)
第一个是未定义的行为。什么事情都可能发生。无论发生什么事,都不允许抱怨。
第二个,抛出一个异常并且你没有捕获它,因此调用std::terminate()
并且你的程序死了。结束。