我经常发现人们使用数组括号[]和法线向量函数.at().为什么有两种不同的方法?两者的好处和缺点是什么?我知道.at()更安全,但是有什么情况下不能使用.at()吗?如果.at()总是更安全,为什么要使用数组括号[].
我四处搜索但找不到类似的问题.如果这样的问题已经存在,请转发给我,我会删除这个问题.
Alo*_*ave 51
std::vector::at()通过抛出out_of_bounds异常来防止访问数组元素超出边界,这与运行时不同,[]当访问超出向量边界时不会发出警告或抛出异常.
std::vector是/被认为是c99中可变长度数组(VLA)的c ++替换/构造.为了能够容易地替换c样式的数组,std::vector需要向量提供与数组类似的接口,因此向量提供[]了访问其元素的操作符.与此同时,C++标准委员会也许认为需要为std::vector过度c型阵列提供额外的安全性,因此他们也提供std::Vector::at()了提供它的方法.
当然,at()方法在解除引用之前检查向量的大小,并且在访问元素时会有一些开销(在大多数用例中可能忽略不计)[],因此,std::vector为您提供安全或更快的选择,以牺牲管理安全自己.
Jas*_*n B 13
正如其他人所提到的,at()执行边界检查而[]不是.我能想到的两个理由[]是:
Fra*_*ank 10
at()
优点:
缺点:
operator[]
优点:
缺点: