【发布时间】:2018-01-16 04:32:02
【问题描述】:
我们正在将我们的代码库从 Objective-C 移植到 C++ 11。在 Obj-C 中,大多数对象都继承自 NSObject,然后您只需传递指针。这对于错误来说非常方便,因为您通常可以通过简单地返回 nil (null) 来让调用者知道没有对象。在移植到 C++ 时,我开始遇到一个事实,即没有真正的并行(或者至少在内存管理中这样做会很丑)。即使对于非关键错误,库通常也会简单地向调用者抛出异常吗?你怎么知道哪一层适合抓住它?通过引用传递一个错误变量是不是更合理?
【问题讨论】:
-
C++17 有
std::optional。如果你愿意,你可以在 C++11 中实现它。 -
因此,如果它不是关键的,那并不是真正的错误,而是预期的行为。考虑一个文件流,在将其分配给文件后,可以通过查看标志来检查流是否为
bad。 -
此外,异常通常处理起来比较慢,如果那不是真正的“异常”,那就不要让它成为。
-
更多地考虑字符串解析器和操纵器等示例。如果来自 Obj-C 的某些内容的格式不正确,那么抛出异常似乎太过分了。这就是我问这个问题的原因。
-
Related,可能重复。
标签: c++ c++11 error-handling exception-handling