使用“at”或[]安全地访问std :: vector的成员

时间:2012-01-08 12:01:36

标签: c++ arrays vector

我有一个数组

arr[10]

它试图访问

arr[12]
直到我意识到我切换到向量时,程序没有做任何事情。在某处我读到如果我使用[],那么程序不会再次给出任何运行时错误,因此我应该使用std::vector' s at。但在我的程序中,我只使用了[],它帮助我发现了问题。似乎[]就足够了。我对吗?此外,是否有任何绑定检查数组的安全性?

2 个答案:

答案 0 :(得分:8)

C ++库的某些实现具有调试模式,即使您使用[]语法也会抛出异常,但标准未指定。这可能就是你所经历的。如果您想确定应使用at()

C ++没有检查原始数组的边界,但是如果您的编译器支持最新版本的C ++,那么您可以使用std::array而不是原始数组,并且此容器只有at()方法比如std::vector

我建议使用std::array,即使你不想要这个功能,因为原始数组还有一些其他的问题(例如,它们会在一蹴而就的情况下衰减到指针)。 std::array表现得更加一致(例如,您可以通过值将它们传递给函数或返回它们并且它们将正常工作,而编写明显的语法以按值传递数组将失败,而只是传递指针)。

帮自己一个忙,永远不要使用原始数组。

答案 1 :(得分:3)

at()函数通过抛出异常来表示请求的位置是否超出范围,因此更安全。