我知道这at()比[]它的边界检查要慢,因为边界检查也有类似的问题,例如C ++ Vector at / []运算符速度   或:: std :: vector :: at()vs :: [] <<令人惊讶的结果!慢/快5到10倍!。我只是不明白该at()方法有什么用。
如果我有一个像这样的简单向量:std::vector<int> v(10);并且我决定通过使用at()而不是[]在有索引的情况下使用in 来访问其元素,i并且不确定其是否在向量范围内,它将迫使我用try-catch包装它块:
try
{
    v.at(i) = 2;
}
catch (std::out_of_range& oor)
{
    ...
}尽管我可以自己使用size()和检查索引来获得相同的行为,但对我来说似乎更容易也很方便:
if (i < v.size())
    v[i] = 2;所以我的问题是:与vector :: operator []
相比,使用vector :: at有什么优点?
什么时候应该使用vector :: at而不是vector :: size + vector :: operator []?
if (i < v.size()) v[i] = 2;,有一个可能的代码路径根本没有分配2给的任何元素v。如果那是正确的行为,那就太好了。但是,当when时,此功能通常没有任何意义i >= v.size()。因此,没有特殊的原因为什么它不应该使用异常来指示意外情况。许多功能只是在使用时operator[]不检查大小,i必须在范围内的文档,并且将生成的UB归咎于调用者。