如果我尝试访问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
)会发现这些错误,但它们需要花费很多时间。