【问题标题】:exit(0) vs return 0退出(0)与返回 0
【发布时间】:2013-04-03 11:03:24
【问题描述】:

当 exit(0) 用于退出程序时,本地的析构函数 范围内的非静态对象不被调用。但是析构函数是 如果使用 return 0 则调用。注意静态对象​​将是 即使我们调用 exit() 也会清理干净。

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

【问题讨论】:

  • 这与上面引用的问题完全不同。他显然很熟悉所引用问题的答案(exit 不调用本地析构函数。他在问为什么。
  • @JamesKanze 好的。我们在这方面有点太快了。投票重新提出问题,删除了反对票。
  • 即使链接到问题中接受的答案给出了原因的提示(“exit() 不返回”),我同意它肯定不是重复的。这是一个完全不同的问题。

标签: c++ return destructor exit


【解决方案1】:

对于exit( 0 ),您正在调用一个函数。你 不要期望调用局部变量的析构函数 if 你正在调用一个函数。编译器不知道, 先验,exit( 0 ) 有什么特别之处。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-27
    • 2013-08-09
    • 2016-08-09
    • 1970-01-01
    • 2022-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多