假设我有一个三角形类,定义如下
class Triangle{
vertex3D vertexs[3];
public:
vertex* GetVertex(int vertexNumber);
}
现在对于大多数普通应用程序来说,很明显 GetVertex
应该在尝试返回顶点指针之前确保 vertexNumber
是一个有效的索引。我会说,如果 vertexNumber
无效,它通常会返回 NULL,但这并不是我真正要问的。
在游戏情况下,检查 vertexNumber
是否一直有效可能会占用相当多的时间,GetVertex
假设仅有效会更快将传入值。
那么三角形以轻微性能提升的名义基本上抛开谨慎是否可以接受?
如果我确实在调试中进行了边界检查而不是在发布时进行,我该如何自动执行此操作以便我不必编辑代码?某种编译时开关之类的?使用#ifdef debug
之类的东西有用吗?我在哪里可以找到更多相关信息?
最佳答案
您绝对应该在调试版本中检查边界。
如果您确定您的代码是正确的(因此,您已经进行了代码审查并对其进行了广泛的测试),那么为了性能起见,可以在发布版本中省略边界检查。
如果您打算在调试版本中而不是在发布版本中测试边界,那么您应该在调试版本中使用断言。 asserts 应用于验证始终为真的事物。如果您没有在函数内部检查边界并且您的代码是正确的,那么该值永远不会超出边界。
关于c++ - 当您追求性能时,类(class)是否应该执行边界检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4158153/