打开编译器的优化之后,vector没有越界检查
一个比较简单的做法是自己定义一个类继承自stl的vector
做完数组的越界检查之后,再调用父类的[]运算符函数
#include <iostream>
#include <functional>
#include <vector>
#include <algorithm>
using namespace std;
#define debug(x) cout<<#x<<": "<<(x)<<endl;
template<typename T>
class MyVec :public std::vector<T> {
public:
T empty;
T& operator [](int index) {
if (index < 0) {
cout << "out of range" << endl;
return empty;
}
return vector<T>::operator[](index);
}
MyVec(vector<T>&& v) :vector<T>(v) {}
};
int main(int argc, char* argv[])
{
MyVec<int> v = vector<int>({1,1,1});
int a = v[-1];
return 0;
}