我正在编写一个代码,其中在if块中完成了一些处理。但是如果处理结果不是预期的,我想执行else块。
if(condition1)
{
// Some processing
if(another condition)
//Do some task;
else
//Execute else of outer block;
}
else
{
}
答案 0 :(得分:8)
您可以通过重写if
条件来做到这一点:
if (condition1) {
// Some processing
}
if (condition1 && another condition) {
// Do some task;
} else {
// Execute else of outer block;
}
答案 1 :(得分:4)
固然值得认真考虑反对这种构造的警告,但可以使用带有全文的switch语句以结构化的方式完成您所要求的事情。
例如:
switch(condition1)
{
case true:
// some processing
if(condition2)
{
// Do some task;
break;
}
[[fallthrough]]; // or just comment: fallthru if not using c++17
case false:
// execute else of outer block;
}
答案 2 :(得分:2)
您可以依靠&&
的短路属性和表达式分隔符运算符 ,
来编写
if (condition1 && (some processing, another condition)){
// Do some task
} else {
// The outer block
}
仅在some processing
为another condition
的情况下评估condition1
和true
。
这样做的好处是condition1
仅被评估一次,如果有副作用,这很有用。
它也很简洁,但是如果some processing
不是一个简单的表达式,那么它实际上是不可行的(如果是一个函数调用,它会很好地工作)。
答案 3 :(得分:0)
添加到现有答案中的另一种技术:
bool skip_X = false;
if (condition1)
{
// Some processing
if (another condition)
{
//Do some task;
skip_X = true;
}
}
if (!skip_X)
....
这避免了对 condition1 进行两次评估,这可能会产生问题,或者如果表达式中的值可以通过在if
或其他线程中进行处理而更改,则可能会出现问题。
说...
如何在不使用goto的情况下从if块跳转到else块?
该语言之所以具有goto
是有原因的,并且-就像那些说“我的构造函数如何在不引发异常的情况下报告错误” 的人一样-通过人为地限制自己使用语言功能显然最适合您的需求,您可以创建更差的代码。