在调试模式下,对std :: vector使用`.at()`而不是operator` []`

sch*_*312 5 c++ vector stdvector operator-keyword

如果我尝试访问std::vector越界,将导致未定义的行为.

const std::vector<int> vec {1,2,3};
const int a = vec[4];
Run Code Online (Sandbox Code Playgroud)

然而,这段代码可能不会立即失败,但a会有一个任意值;

如果vec通过该方法访问,.at()则将抛出异常.

const int a = vec.at(4);
Run Code Online (Sandbox Code Playgroud)

缺点是,如果.at()总是使用,性能将显着下降.

我的问题是,如果某些C++编译器支持编译标志,则会切换operator []到该.at()方法.

将其打开可以获得良好的可调试代码.将其关闭会导致快速发布可执行文件.

我知道堆检查工具,比如valgrind会发现这些bug,但是它们需要花费很多时间.

归档时间:

查看次数:

118 次

最近记录:

7 年,6 月 前