vector::at
对边界检查很有帮助,但会导致速度较低。所以我想知道是否有一种方法可以在vector::operator[]
和vector::at
之间快速转换代码,以便一个用于发布,一个用于调试。像
If (DEBUG)
{
// Do with .at
}
else
{
// Do with []
}
但是,使用这样的代码会引入风险,当Do with .at
被更改时,Do with []
被忘记相应地更改。
是否有一种快速的方法来转换两种模式之间的代码?
Like
If (DEBUG) { // Do with .at } else { // Do with [] }
您可以通过使用operator[]
并启用您使用的标准库实现的边界检查调试模式来获得类似的内容。如何做到这一点,以及该选项是否存在取决于您使用的实现。
请注意,通常整个项目,包括所有库,必须使用相同的标准库选项构建。如果使用预构建的库,这是一个潜在的问题。
一个普遍可移植的解决方案是编写一个包装器函数,根据构建配置有条件地调用一个函数或另一个函数。缺点是,这需要更改所有使用包装函数的代码来使用自定义函数。