我正在写一个 C++ 类。它的一些字段是 STL 容器,有些不是。在编写方法时我开始想,我应该如何处理传递给方法的无效值?例如,某些方法或多或少是 STL 容器方法的包装器。当传递无效的迭代器时,许多 STL 方法只是具有“未定义的行为”。我想是这样的,因为它允许 STL 代码忽略这些情况,从而更快。
但是对于更高级别的代码,我该怎么办?当发生意外错误时,我确实会抛出异常,例如开发人员犯的错误导致的错误。但在这种情况下,参数值取决于接口用户,而不是实现者。我可以忽略无效的参数和无效的迭代器等,并将问题“传递”给较低级别的函数,这将产生未定义的行为,但我也可以抛出异常或至少找到某种方法来报告错误。
最好的办法是什么?
示例:我有一个表示树节点的类,它有一个 add_child() 方法,它采用 std::shared_ptr 参数。我应该检查该值还是让用户确保没有通过 nullptr?或者对于无效的迭代器,将其传递给 STL 方法或报错?如果我应该报告 - 例外是正确的解决方案吗?