运行代码时是否可以在main()之后调用其他方法/指令
Is there possibility to invoke other methods/instructions AFTER main() when running the code
在
调用int main()后是否有可能运行任何其他指令?
int main(){cout<<"a";}
在main()中的调用之后,有对cout<<"b"的调用;之后的某个地方。没有任何变化main()
。
静态对象的析构函数和在 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
你可以
把你的最后一部分放在atexit()
.它将在程序终止时运行,即在你对 main() 的调用完成后。
您也可以有多个atexit
。
如果不同的调用指定了多个 atexit 函数 对于此函数,它们都以相反的顺序作为堆栈执行 (即指定的最后一个函数是第一个在 退出)。
是的,定义一个在其析构函数中执行cout << "b"
的类,然后定义该类的全局实例。
简而言之,几乎没有选择。您可以使用atexit()
在主出口后发生某些事情,也可以拥有一个全局对象,其析构函数在主出口后调用。但是main的结束正式是你的程序的结束。
相关文章:
- 了解在返回值之前和之后使用 EAX 的函数调用
- 在之后仍需要使用源对象时调用父移动分配运算符
- 在成员构造函数之后调用基类构造函数
- 在类的第一个/最后一个实例存在之前/之后调用一对函数.有没有更好的方法?
- 为什么在编译此代码时会出现此错误?(在~之后调用terminate)
- 在 malloc 之后检查 &在调用 free() 之前
- 为什么在杂注 omp 关键之后多次调用 printf 会产生乱码输出?
- gtest - 确保方法之前没有被调用,但可以在某个方法调用之后调用
- 如果在 C++ 中的 malloc() 之后调用 free() 则会出现错误
- 为什么即使在使用 Qt::D irectConnection 之后,接收器的线程中仍会调用插槽?如何确保在另一个线程中调用它?
- 为什么在"return 0"之后调用析构函数?
- 是在C 静态初始化之前或之后调用dllgetClassObject
- 从另一个线程调用shared_from_this但在初始化shared_ptr之后时获取bad_weak_ptr
- 类的堆分配对象是否在其作用域之后但在 C++ 中调用其析构函数之前处于活动状态
- 对于QProcess,是否需要在waitForFinished之后调用waitForReadyRead
- 在调用解构之后,存储在内存中的动态分配值会发生什么变化
- 如何在函数调用之后初始化变量,例如新表达式提供
- 如果我对async_read进行两次调用,那么只有在处理完第一次调用之后,才会处理第二次调用,这是否安全
- 这个指针和所有参数在调用之后都是空的(但在调用之前是ok的)
- openGL绘制调用之后会发生什么