我应该使用方括号[]或.at()进行数组访问吗?

时间:2016-07-06 17:59:27

标签: c++ arrays

由于C ++数组和向量中的at()函数提供了越界检查,并且使用operator[]时没有显着的性能差异,是否应该使用括号进行数组访问? / p>

也许只在性能关键代码中?

4 个答案:

答案 0 :(得分:5)

你不应该使用它们中的任何一个。 std::vector提供了几乎不需要通过索引显式访问项目的迭代功能。

要回答您的问题,在为您不使用的内容付费后,如果您知道自己不会出界,则无需使用at()

否则你每次要取消引用时都应该检查指针是否为nullptr,但实际上如果你确定它是一个有效的指针,你就不会这样做

答案 1 :(得分:4)

当您确定没有"越界"时,您应该使用[]访问将会发生。

当"越界时,你应该使用at()"访问可能发生,你准备要么处理(通过捕获异常并做一些合理的事情)或者你的程序崩溃是正常的(无论如何你使用[],只是以一种不确定的方式)。

答案 2 :(得分:2)

后来从(i)变为运营商是一件非常麻烦的事。因此我同意Jesper的意见。

为了捕捉越界问题,您可以例如要么使用valgrind,要么使用GCC编译-D_GLIBCXX_DEBUG。有关详细信息,请参阅GCC Debug mode

答案 3 :(得分:1)

我认为您应该首先使用at(),因为我们相信我们的计划不会遇到边界访问问题。因此,我们立即开始使用[ ]

但是,如果我们通过SO上的帖子(通常是新的程序员),那么有很多关于矢量访问的问题,如果使用at()来检测边界问题,那么这些问题很容易解决。

鉴于此经验,当您怀疑自己越界时,或者如果有提示您可能超出界限时,请使用at()进行调试。