Vector :: at vs. vector :: operator [] - 不同的行为

时间:2015-02-19 06:22:08

标签: c++ vector

#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]因为它的顺序。但为什么它给出了完全正确的结果呢?提前谢谢。

1 个答案:

答案 0 :(得分:1)

vector :: at()显式抛出超出绑定的异常,而vector :: operator没有这样做。按设计。

某些std实现支持在调试模式下进行operator []边界检查。

由于您的test()方法未访问任何实例变量和this,因此即使this指向不存在的位置也可以毫无问题地执行。