mok*_*oka 5 c++ error-handling operator-overloading
我目前开始研究 C++ 中简单 2D 顶点类的运算符重载,其中位置应可通过 [] 运算符使用。这通常是有效的,但我真的不知道如何处理错误,例如如果运算符超出范围(在只有 x 和 y 值的 2D 顶点类的情况下,如果它大于一)
在这种情况下处理错误的常见方法是什么?
谢谢
即使在最好的情况下,错误处理也是一个棘手的问题。它几乎可以归结为错误有多大,以及当错误发生时预计会发生什么情况。
您可以遵循四种基本路径:
throw本质上跳过了和 之间的所有内容catch,只留下死亡和毁灭。NULLor 0,STL 容器返回object.end(),否则可以使用未使用的值(例如-1or "")。一般来说,我只会在那些破坏程序的事情、那些我不希望在没有共同努力的情况下恢复的事情上诉诸选项一。否则,使用异常作为流量控制的一种形式并不比回到goto.
对于非程序破坏性错误,选项二可能是最常见的,但它的有效性实际上取决于您正在处理的返回类型。这是有利的,因为它允许程序员通过检测故障并自行恢复来本地控制流程。在处理重载运算符时,它的用途有限,但我认为为了完整起见我应该将其放入。
选项三是根据具体情况而定的。许多错误无法以这种方式处理,甚至可能导致不直观结果的错误。谨慎使用,并确保彻底记录。或者,根本不记录它,并假装它是选项四。
现在,对于提供的具体示例,即重载时出现超出范围错误operator[],我个人会选择选项四。并不是因为我特别喜欢看到其他程序员在处理我的代码时遭受痛苦(顺便说一句,我确实这样做,但这与讨论无关),而是因为这是预期的。
大多数情况下,程序员使用 时operator[],他们希望处理自己的边界检查,并且不依赖类型或类为他们做任何事情。即使在 STL 容器中,您也可以看到operator[](不进行范围检查)与其他冗余object.at()(进行范围检查)并行的情况。使用您自己的重载运算符反映预期行为往往会产生更直观的代码。