c++中vector::operator[]与vector::at之间的转换



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[]并启用您使用的标准库实现的边界检查调试模式来获得类似的内容。如何做到这一点,以及该选项是否存在取决于您使用的实现。

请注意,通常整个项目,包括所有库,必须使用相同的标准库选项构建。如果使用预构建的库,这是一个潜在的问题。

一个普遍可移植的解决方案是编写一个包装器函数,根据构建配置有条件地调用一个函数或另一个函数。缺点是,这需要更改所有使用包装函数的代码来使用自定义函数。

相关内容

  • 没有找到相关文章

最新更新