exit(0)vs return 0

Uma*_*ack 10 c++ destructor return exit

当exit(0)用于退出程序时,不会调用本地作用域的非静态对象的析构函数.但是如果使用return 0则调用析构函数.注意即使我们调用exit()也会清理静态对象.

这种逻辑背后应该有一些原因.我只是想知道它是什么?谢谢.

Jam*_*nze 8

在这种情况下exit( 0 ),你正在调用一个函数.如果要调用函数,则不希望调用局部变量的析构函数.并且编译器先验地不知道有什么特别之处exit( 0 ).

实际上,这个基本原理实际上只适用于异常之前的C++.标准可以重新定义exit()以使用参数抛出实现定义的异常,并指定将调用main包装在捕获此异常的try块中,并将返回代码传递回系统.这意味着exit在C和C++ 中具有完全不同的语义; 无论如何,委员会之前没有提出做出这一改变的建议.