#include<iostream>
#include<vector>
#include<stdexcept>

using namespace std;

int main()  
try{
vector<int> v;
int x;
while(cin>>x) v.push_back(x);
for(int i=0;i<=v.size();i++)
cout<<"v["<<i<<"]=="<<v[i]<<endl;

}catch(out_of_range){
cerr<<"oops!range error\n";
return 1;

}catch(...){
cerr<<"exception :something went wrong\n";
return 2;

}

在Linux下运行这个程序,为什么没有报错???

而是越界的元素全部赋值为0?

求大牛赐教!!!

推荐图书

  • C++ Primer中文版(第4版)
  • More Effective C++:35个改善编程与设计的有效方法(中文版)
  • 设计模式:可复用面向对象软件的基础
  • Linux系统管理技术手册(第2版)


1个回答

vector::operator[]不会抛越界异常,vector::at()才会抛越界异常。越界之后的行为是undefined behavior,因此不要计较越界之后到底会怎样,保证程序绝对不越界就是了。