10

当 exit(0) 用于退出程序时,不会调用局部范围的非静态对象的析构函数。但是如果使用return 0,就会调用析构函数。请注意,即使我们调用exit(),也会清理静态对象。

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

4

1 回答 1

8

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

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

于 2013-04-11T09:55:36.960 回答