我有一个数组
arr[10]
它试图访问
arr[12]
直到我意识到当我切换到 vector 时,程序才做任何事情。我在某处读到如果我使用 []
那么程序将不会再次给出任何运行时错误,所以我应该使用 std::vector
的 at
。但在我的程序中,我只是使用了 []
,它帮助我发现了问题。看起来 []
就足够了。我对吗?另外,为了安全,数组有没有绑定(bind)检查?
最佳答案
C++ 库的某些实现具有 Debug模式,即使您使用 []
语法也会抛出异常,但这不是标准指定的。所以这可能就是你所经历的。如果您想确保应该使用 at()
。
C++ 没有对原始数组进行边界检查,但是如果你的编译器支持最新版本的 C++,那么你可以使用 std::array
而不是原始数组,并且这个容器有一个 at()
方法就像 std::vector
。
我建议使用 std::array
,即使您不想要此功能也是如此,因为原始数组还有一些其他问题(例如,它们会衰减为指针)。 std::array
的行为更加一致(例如,您可以将它们按值传递给函数或返回它们,它们将正常工作,而编写明显的语法以按值传递数组将失败,取而代之的是只需传递一个指针)。
帮自己一个忙,永远不要使用原始数组。
关于c++ - 使用 "at"或 [] 安全地访问 std::vector 的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8777313/