C++程序是否使用在其main函数中使用try/catch块所需的异常?

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将被调用.


Ser*_*eyA 7

不,C++标准不需要捕获每个异常.如果未捕获异常,程序将终止,并且如果正在进行堆栈展开,则它是实现定义的(它与我所知道的所有编译器一起).进一步阅读:https://en.cppreference.com/w/cpp/language/throw