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

时间:2018-06-01 12:59:32

标签: c++ vector operator-keyword stdvector

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

const std::vector<int> vec {1,2,3};
const int a = vec[4];

尽管如此,此代码可能不会立即失败,但a将具有任意值;

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

const int a = vec.at(4);

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

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

使用它可以获得良好的可调试代码。 将其删除会导致快速发布可执行文件。

我知道堆检查工具(例如valgrind)会发现这些错误,但它们需要花费很多时间。

0 个答案:

没有答案