清除后为什么还可以访问数据向量?

mar*_*zzz 1 c++ vector stdvector

是代码:

vector<double> samples;

int main()
{
    samples.resize(100);
    for(int i=0; i<100; i++) {
        samples[i]=i/100.0;
    }

    samples.clear();
    cout << "vector size: " << samples.size() << endl;
    cout << "... but samples[9]=" << samples[9] << endl;
}
Run Code Online (Sandbox Code Playgroud)

并输出它:

vector size: 0
... but samples[9]=0.09
Run Code Online (Sandbox Code Playgroud)

清除向量(大小为0)后,我仍然可以访问其数据.这是正常的吗?

参考说元素将被"销毁",但它似乎并不意味着"默认/空"值.

在其他语言中,我会在运行时收到"超出范围"的错误消息...

son*_*yao 5

它似乎并不意味着"默认/空"值.

是的,这只是UB.

注意std::vector::operator[]不执行边界检查,同​​时std::vector::at()执行,并且std::out_of_range将针对该情况抛出类型的异常.