【发布时间】:2011-04-27 04:48:36
【问题描述】:
1) 为方便起见,我将整个程序放在 try 块中。这样我就可以在我的代码中的任何时候抛出一个异常,并且知道它会以同样的方式被处理。随着程序变得越来越大,这种技术会影响性能吗?
2) 如果对象在超出范围时被释放,为什么抛出一个临时对象是有效的?例如:
类错误:公共 std::exception
{
私人的:
魅力;
私人的:
错误(字符 *l):m(l){}
虚拟字符 *what()
{
返回米;
}
};
主函数()
{
尝试
{
抛出错误(“测试”);
}
捕获(标准::异常 &e)
{
放(e.what());
返回-1;
}
返回0;
}
在throw语句中,临时对象只在try作用域中声明,为什么不会失效?
3) 对于非英语语言的 Windows 操作系统,STL 异常类的 what() 成员是否仍会返回 char* 字符串?或者它可以返回一个wchar_t* 字符串吗?
【问题讨论】:
-
你真的不应该把你的整个程序放在一个 try 块中。如果你遇到任何错误,你的整个程序就会结束,而不是让你优雅地处理它并继续。这有点违背了例外的目的。
-
我不同意,如果您在此级别从异常记录有意义的信息,那么它是完全有效的。与调用 std::terminate 相比,它为您提供了更好的信息,如果没有捕获到异常,就会发生这种情况。
-
@JoshD 在我的代码的某些区域内,我可以有更多的 try-catch 块,我可以优雅地处理异常。第一个 try-catch 块是处理程序无法继续执行的致命错误。
-
@radman:我并不是说不应该进行捕捉。我是说在整个程序周围有一个巨大的 try 块不如拥有更细粒度的 try 和 catch 块有用。我同意捕获异常比让程序崩溃更好。
-
函数的返回类型如何在运行时改变?