我有一个类:
class Vector {
public:
element* get(int i);
private:
element* getIfExists(int i):
};
get
调用 getIfExists
;如果元素存在,则返回它,如果不存在,则执行某些操作。 getIfExists
可以表示某些元素 i
不存在
通过抛出异常或返回 NULL。
问题:性能上会有什么不同吗?在一种情况下,get
需要检查 ==NULL
,在另一种情况下 try...catch
。
最佳答案
这是一个设计问题,而不是性能问题。如果是异常情况——比如在你的 get
函数中——那么抛出一个异常;甚至更好地触发断言,因为违反函数前提条件是编程错误。如果它是预期的情况 - 就像在您的 getIfExist
函数中一样 - 那么不要抛出异常。
关于性能,存在零成本异常实现(尽管并非所有编译器都使用该策略)。这意味着只有在抛出异常时才会支付开销,这应该是……好吧……异常。
关于c++ - NULL 与抛出和性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7870040/