我们知道,C++中容器[]没有at()访问容器更安全,前者溢出五任何提醒,后者会报错,原因在于,后者在return时,添加了一个断言,也就是检查,参见以下代码:
// at() with range check
reference at(size_type i)
{
return rangecheck(i), elems[i];
}
/*BOOST_CONSTEXPR*/
const_reference at(size_type i) const {
return rangecheck(i), elems[i];
}
若,断言为真,程序中断,抛出异常,否者会正常执行,返回逗号表达式的后半部分。