【发布时间】:2010-03-05 03:15:53
【问题描述】:
使用 stl::vector:
vector<int> v(1);
v[0]=1; // No bounds checking
v.at(0)=1; // Bounds checking
有没有一种方法可以禁用边界检查而不必将所有at() 重写为[]?我正在使用 GNU 标准 C++ 库。
编辑:我在怀疑存在瓶颈的区域将at() 更改为[],这大大减少了计算时间。但是,由于我在开发代码和运行实验之间进行迭代,我想在开发期间启用边界检查,并在我真正运行实验时禁用它。我想 Andrew 的建议是最好的解决方案。
【问题讨论】:
-
目的是什么?可能有更好的方法。
-
您应该能够使用正则表达式将
at()替换为[],并设置断点以帮助验证所有实例都已被替换。不是说一个滑过会是一场灾难,关心的只是性能,对吧? -
您为什么要这样做?如果您的答案是性能,那么请告诉我您已经分析并发现这是您的瓶颈。如果是这种情况,那么可以,将您的 at()s 重写为
[]。否则,顺其自然。 -
@Adam:也不是所有的
ats,只是热点。 :-P -
您应该查明瓶颈的确切位置。也许您的代码在 malloc() 中花费 80% 的时间与边界检查无关:)