c++ - 当您追求性能时,类(class)是否应该执行边界检查

标签 c++ language-agnostic

假设我有一个三角形类,定义如下

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/

相关文章:

c++ - 为什么在针对类的const成员函数的range-for循环编译中使用此const自动变量?

algorithm - 用 getRandom 设置

language-agnostic - UTF-8到底有多流行?

algorithm - 查找字谜是否属于回文的最佳算法是什么?

model-view-controller - 如何让 Controller 根据 View 改变其行为?

C++:字符串运算符重载

c++ - 重载函数候选匹配问题

c++ - fatal error : iostream. h 没有那个文件或目录

c++ - TCP 套接字 - 服务器不接受任何连接 UNIX

math - 如何有效地乘以数字中的每个数字