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

Shi*_*bli 2 c++ arrays vector

我有一个阵列

arr[10]
Run Code Online (Sandbox Code Playgroud)

它试图访问

arr[12]
Run Code Online (Sandbox Code Playgroud)

直到我意识到我切换到向量时,程序才做任何事情.在某处我读到如果我使用[]那么程序不会再给出任何运行时错误,所以我应该使用std::vector's at.但在我刚刚使用的程序中[],它帮助我发现了问题.看来[]已经足够了.我对吗?此外,是否有任何绑定检查阵列的安全性?

bam*_*s53 8

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

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

我推荐使用std::array即使你不想要这个功能,因为原始数组有一些其他的问题(例如它们会在一滴帽子时衰减到指针).std::array表现更加一致(例如,你可以按值传递它们的功能或回报他们,他们会正常工作,而写作明显的语法按值传递数组将失败,反而只是传递一个指针).

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