||
比if (...)
更简洁,更容易输入,所以我想要一种方法来执行以下操作(在我的代码中会发生很多事情):
int bar() {...; return successFlag;}
int foo() {
bar() || return(...); // return early on errors
...
}
有可能吗?
或者甚至更好,是否可以return
从[{1}}返回main
,而不是通过bar
进行链接?
答案 0 :(得分:2)
对于第一部分,不:return
是关键字,而不是表达式,因此不能以该形式组合。我认为你本能地将||
字面意思地理解为英语意义上的“或” - 显然这不是它的含义。
对于第二部分,你可以 - 在理论上 - 通过使用例外,但这是一个强烈气馁的做法。例外情况适用于“特殊情况”,更具体地说,代码无法在本地恢复的错误条件(在当前函数/方法的上下文中)以及必须在更高级别确定适当操作的情况。
使用异常作为一般流控制机制有两个问题:
性能:C ++编译器针对“非特殊”代码路径进行了优化(因为这是应该正常发生的事情),因此异常处理机制往往非常慢。这不是因为缺乏代码优化,而是因为如果没有例外,机制需要零或接近零的成本,即使成本是异常需要大量的工作来处理。
代码清晰度/可测试性:对控制流使用异常会使代码难以阅读并且单独正确地进行单元测试。
答案 1 :(得分:-2)
第一部分 - 没有。对于第二个:setjmp和longjmp。但请注意,它们都破坏了通常的基于C ++堆栈的析构函数调用,并且可能与异常混合不好。