Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
当 exit(0) 用于退出程序时,不会调用局部范围的非静态对象的析构函数。但是如果使用return 0,就会调用析构函数。请注意,即使我们调用exit(),也会清理静态对象。
这种逻辑背后应该有一些原因。我只是想知道它是什么?谢谢你。
在 的情况下exit( 0 ),您正在调用一个函数。如果你正在调用一个函数,你不希望调用局部变量的析构函数。并且编译器不知道,先验,有什么特别之处exit( 0 ).
exit( 0 )
事实上,这个原理实际上只适用于异常之前的 C++。该标准可以重新定义exit()以使用参数抛出实现定义的异常,并指定调用main被包装在捕获此异常的 try 块中,并将返回代码传递回系统。然而,这意味着exit在 C 和 C++ 中具有完全不同的语义;无论如何,委员会没有提出任何建议来做出这种改变。
exit()
main
exit