C++ 使用标志、返回、异常、转到或中断中止过程
我有一个代码,它解析一个文件,如果满足无效条件,它就会崩溃。 代码是C++的,类似于:C++ 使用标志、返回、异常、转到或中断中止过程,c++,exception,return,break,goto,C++,Exception,Return,Break,Goto,我有一个代码,它解析一个文件,如果满足无效条件,它就会崩溃。 代码是C++的,类似于: bool ok = true; if (task1() == false) ok = false; if (ok && (task2() == false)) ok = false; if (ok && (task3() == false)) ok = false; cleanup(); return ok; 现在我正在寻找更清洁的替代品,以获得同样的
bool ok = true;
if (task1() == false)
ok = false;
if (ok && (task2() == false))
ok = false;
if (ok && (task3() == false))
ok = false;
cleanup();
return ok;
现在我正在寻找更清洁的替代品,以获得同样的结果。
据我所知,有:
- 使用上面代码中的标志和许多条件
- 对于相同的信息,有许多冗余测试。 对运行时的影响可以忽略,而且可能 完全由编译器删除,但仍会生成代码 更复杂
- 您可以将任务包装在方法中并从中返回
- 这看起来更干净,但您可以将代码分散到多个位置 功能。根据您的上下文,可能会有很长的时间 参数列表。更多的是,它也不是 最好将回报分散到整个方法中
- 您可以使用异常
- 这将提供一些相当描述性的代码,但它也是 很重,因为你只想跳过一些电话。更何况 可能并不完全是例外
- 您可以从
或另一个循环中do while(0)
中断
或switch语句。
- 嗯,这并不是真的要完成这样的任务。除了 您可以使用它获得轻量级和紧凑的实现 和描述性关键字
- 使用
语句goto
- 这似乎结合了大多数优势。不过,我还是不确定。 到处都有人在说,打破多重循环 是该关键字唯一合理的用法
if(确定)
{
keyString=“速度”;
tmpVal=configuration->getValue(部分,键串,-1);
如果(tmpVal!=-1)
{
m_速度=tmpVal;
如果(单位速度<单位分钟速度)
m_min速度=m_速度;
m_needSpeed=真;
}
否则,如果(m_需要速度)
{
ok=假;
keyErr=键串;
}
}
假设所有这些函数都返回一个bool
,在我看来,显示的代码在逻辑上与以下代码相同:
bool ok= task1() && task2() && task3();
cleanup();
return ok;
如果,你为什么不直接使用
?无论人们说什么,打破多个循环是这个关键字唯一合理的用法。还有更多,但是goto
应该是你最后能找到的工具之一,因为即使你做对了,也没有人会相信你做对了。非常罕见的情况是,goto
实际上使代码更简单、更易于维护,当您找到一个时,您可能仍然错了。注意:对于多重循环转义子句,我不会使用goto
。我把多个循环放在一个函数中,然后从函数返回。
bool ok= task1() && task2() && task3();
cleanup();
return ok;