我有一个数组
arr[10]
它试图访问
arr[12]
直到我意识到我切换到向量时,程序没有做任何事情。在某处我读到如果我使用[]
,那么程序不会再次给出任何运行时错误,因此我应该使用std::vector
' s at
。但在我的程序中,我只使用了[]
,它帮助我发现了问题。似乎[]
就足够了。我对吗?此外,是否有任何绑定检查数组的安全性?
答案 0 :(得分:8)
C ++库的某些实现具有调试模式,即使您使用[]
语法也会抛出异常,但标准未指定。这可能就是你所经历的。如果您想确定应使用at()
。
C ++没有检查原始数组的边界,但是如果您的编译器支持最新版本的C ++,那么您可以使用std::array
而不是原始数组,并且此容器只有at()
方法比如std::vector
。
我建议使用std::array
,即使你不想要这个功能,因为原始数组还有一些其他的问题(例如,它们会在一蹴而就的情况下衰减到指针)。 std::array
表现得更加一致(例如,您可以通过值将它们传递给函数或返回它们并且它们将正常工作,而编写明显的语法以按值传递数组将失败,而只是传递指针)。
帮自己一个忙,永远不要使用原始数组。
答案 1 :(得分:3)
at()
函数通过抛出异常来表示请求的位置是否超出范围,因此更安全。