0

调用 int main() 后是否有可能运行任何其他指令?

int main(){cout<<"a";}

在 main() 调用之后,调用 cout<<"b"; 之后的某个地方。没有任何变化main()

4

4 回答 4

7

静态对象的析构函数和用 注册的函数std::atexit,在main退出后执行。

#include <iostream>
#include <cstdlib>

struct S {~S() {std::cout << "c";}};
void f() {std::cout << "b";}

S s;

int main() {
    std::atexit(f);
    std::cout << "a";
}

输出:abc

于 2013-02-01T17:33:00.443 回答
6

你可以把你的最后一部分放在atexit(). 它将在程序终止时运行,即在您对 main() 的调用完成之后。

你也可以有多个atexits 。

如果对该函数的不同调用指定了多个 atexit 函数,则它们都作为堆栈以相反的顺序执行(即,最后指定的函数是退出时第一个执行的函数)。

于 2013-02-01T17:32:42.593 回答
2

是的,定义一个cout << "b"在其析构函数中执行的类,然后定义该类的全局实例。

于 2013-02-01T17:32:30.037 回答
2

简而言之,选择很少。您可以使用atexit()在 main 退出后发生某些事情,或者您可以拥有一个全局对象,其析构函数在 main 退出后调用。但是 main 的结束是你程序的正式结束。

于 2013-02-01T17:32:55.310 回答