问题1:
有可能抛出一个不会被std :: exception捕获的异常吗?
try
{
}
catch(std::exception & e)
{
}
catch(...)
{
//Is this block needed?
}
Run Code Online (Sandbox Code Playgroud)
问题2:
有没有更好的:
catch(std::exception & e)
Run Code Online (Sandbox Code Playgroud)
要么
catch(std::exception e)
Run Code Online (Sandbox Code Playgroud)
要么
catch(const std::exception &e)//<--- this is the method I usually use
Run Code Online (Sandbox Code Playgroud)
sho*_*osh 11
Q1:是的.你可以抛出任何类型,而不是从std :: exception继承的必要类型.
你可以写入throw 1;throw和int或者throw "hello";抛出一个char*,这两个都不会继承std::exception.然而,这被认为是不好的做法,因为班级的用户不能指望你扔任何东西.如果您不想继承std::exception您通常所做的事情,那就创建自己的异常层次结构.
Q2:按值捕获异常(第二个选项)是一种不好的做法,因为您强制复制异常实例,并且可能执行可能导致进一步异常的分配.
使用第一个选项建议您打算更改ecatch块,这也是您可能希望避免的,因为异常通常在创建后保持不可变.唯一剩下的就是第三种选择.
当然,你可以抛出你想要的任何类型,而且不需要从中派生出来std::exception.
抓住const参考更好.原因是你可以扔一个const或一个非const,它可以被非抓住const.这就像沉默的铸造一样const.
| 归档时间: |
|
| 查看次数: |
1151 次 |
| 最近记录: |