读书人

通过错误控制程序走向是否可取

发布时间: 2013-01-18 10:22:42 作者: rapoo

通过异常控制程序走向是否可取?
这种方式我在MFC里见过。
函数通过返回值表示一组状态,抛出异常表示一组状态。
在调用方通过接收返回值和捕获异常来检查函数状态。


函数就这么用,异常也并非是“异常”,而是正常情况之一。

请问这种方式可取吗?
[解决办法]
个人意见:不可取。
[解决办法]
不可取,单效率上说就差好几个等级
[解决办法]
好理解,有方便,就用。
[解决办法]
可不可取要看整个代码结构,而不能是其他函数靠返回码,个别抛异常;
如果是OO代码,就用异常
[解决办法]
如果不抛出异常 层层返回 可能会比较麻烦
[解决办法]

引用:
如果不抛出异常 层层返回 可能会比较麻烦


直接goto不OK?
GOTO也就这个时候好用
[解决办法]
异常不是这样用的,这样写的代码别人怎么看啊。。。
[解决办法]
异常要只在真正发生异常的时候再用
异常流程的效率比起正常流程要低很多
[解决办法]
try catch在处理像文件操作时真的好用,逻辑非常清晰,用if 和 else比不上。但是try catch效率摆在那儿,真心无语。
[解决办法]
程序流程应该是语言无关的。
[解决办法]
一般没有把正常的当成异常抛出再处理的吧
[解决办法]
引用:
如果不抛出异常 层层返回 可能会比较麻烦

谁说必须要抛出异常才能返回最外层或指定的某一层?
#include <stdio.h>
#include <setjmp.h>
jmp_buf mark;
int i=0;
void c() {
printf( "c in\n");
if (1==i%2) longjmp( mark, i );
printf( "c out\n");
}
void b() {
printf( "b in\n");
c();
printf( "b out\n");
}
void a() {
printf( "a in\n");
b();
printf( "a out\n");
}
void main( void )
{
int jmpret;
jmpret = setjmp( mark );
printf( "Start %d\n",jmpret);
if( jmpret == 0 ) {
printf( "First\n");
a();
i++;
a();
} else {
printf( "Second\n");
}
}
//Start 0
//First
//a in
//b in
//c in
//c out
//b out
//a out
//a in
//b in
//c in
//Start 1
//Second
//

[解决办法]
引用:
引用:学习了,但是不晓得这个比抛出异常好在哪里? 看起来代码更复杂了
引用:引用:如果不抛出异常 层层返回 可能会比较麻烦
谁说必须要抛出异常才能返回最外层或指定的某一层?
C/C++ code?1234567891011121314151617181920……



C++这么干必然是错误的

读书人网 >C++

热点推荐