#include <iostream>
#include <vector>
#include <stdexcept>
using namespace std;
class sample
{
public:
sample()
{
cout << "consructor called" << endl;
}
void test()
{
cout << "Test function" << endl;
}
};
int main()
{
vector<sample> v;
sample s;
v.push_back(s);
try
{
v.at(1).test(); // throws out of range exception.
v[1000].test(); // prints test function
}
catch (const out_of_range& oor)
{
std::cerr << "Out of Range error: " << oor.what() << '\n';
}
return 0;
}
为什么v[1000].test();
在屏幕上打印测试功能。我在向量中只添加了一个对象。我同意我可以访问v[1000]
因为它的顺序。但为什么它给出了完全正确的结果呢?提前谢谢。
答案 0 :(得分:1)
vector :: at()显式抛出超出绑定的异常,而vector :: operator没有这样做。按设计。
某些std实现支持在调试模式下进行operator []边界检查。
由于您的test()
方法未访问任何实例变量和this
,因此即使this
指向不存在的位置也可以毫无问题地执行。