退出(0)与返回 0
Posted
技术标签:
【中文标题】退出(0)与返回 0【英文标题】:exit(0) vs return 0 【发布时间】:2013-04-03 11:03:24 【问题描述】:当 exit(0) 用于退出程序时,本地的析构函数 范围内的非静态对象不被调用。但是析构函数是 如果使用 return 0 则调用。注意静态对象将是 即使我们调用 exit() 也会清理干净。
这个逻辑背后应该有一些原因。我只是想知道它是什么?谢谢。
【问题讨论】:
这与上面引用的问题完全不同。他显然很熟悉所引用问题的答案(exit
不调用本地析构函数。他在问为什么。
@JamesKanze 好的。我们在这方面有点太快了。投票重新提出问题,删除了反对票。
即使链接到问题中接受的答案给出了原因的提示(“exit() 不返回”),我同意它肯定不是重复的。这是一个完全不同的问题。
【参考方案1】:
对于exit( 0 )
,您正在调用一个函数。你
不要期望调用局部变量的析构函数 if
你正在调用一个函数。编译器不知道,
先验,exit( 0 )
有什么特别之处。
事实上,这个原理实际上只适用于之前的 C++
例外。该标准可以重新定义exit()
来抛出一个
实现用参数定义异常,并指定
对main
的调用被包装在一个try 块中,该块捕获
此异常,并将返回代码传递回系统。
这意味着exit
有一个完全不同的
然而,C 和 C++ 中的语义;无论如何,没有
提交委员会的提案以进行此更改。
【讨论】:
以上是关于退出(0)与返回 0的主要内容,如果未能解决你的问题,请参考以下文章