Jen*_* M. 4 c++ exception language-lawyer
如果C++代码抛出异常但未捕获异常,则会导致SIGABRT.有些系统只打印"Abort",其他一些系统也会打印e.what()的内容.
问题是:C++标准是否说主要功能需要try/catch块才能使程序被认为是一个表现良好的程序,或者C++是否只是默默地依赖系统来处理它?
Alg*_*ius 10
如C++ 17标准草案中所述,在第18.3.9节[except.handle]中:
如果找不到匹配的处理程序,
std::terminate()则调用该函数; 在此调用之前是否展开堆栈std::terminate()是实现定义的.
因此,这个程序的行为不被认为是未定义的,因为标准定义了,std::terminate将被调用.
不,C++标准不需要捕获每个异常.如果未捕获异常,程序将终止,并且如果正在进行堆栈展开,则它是实现定义的(它与我所知道的所有编译器一起).进一步阅读:https://en.cppreference.com/w/cpp/language/throw
| 归档时间: |
|
| 查看次数: |
180 次 |
| 最近记录: |