【STL】C++程序的启动与终止


本文介绍 C++程序的启动与终止相关说明。


C++程序在启动和终止阶段,会执行和 C程序相同的逻辑,同时还额外包含下文所述的一系列操作。

在运行环境调用 main 函数之前,系统会先为所有静态生命周期对象赋予你指定的常量初始值,随后执行这些静态对象剩余的构造函数。

不同编译单元之间,静态对象的构造顺序没有统一规定;但可以确定的是:标准输入输出流对象会提前完成初始化,因此静态对象的构造函数中可以正常使用它们。

这些标准流对象包括:

  • cin:标准输入
  • cout:标准输出
  • cerr:无缓冲标准错误输出
  • clog:带缓冲标准错误输出

程序终止阶段,在静态对象的析构函数中,同样可以使用以上流对象。

和C语言规则一致:当从 main 函数正常返回,或是主动调用 exit 函数时,系统会按照注册的逆序执行所有通过 atexit 注册的函数。如果这类注册函数内部抛出异常,程序会直接调用 terminate 终止运行。
也就是说 atexit 注册的函数禁止抛出异常。一旦抛出异常,程序会直接触发 std::terminate 强制终止,属于未正常退出。

相关推荐
小小龙学IT14 分钟前
C++ std::vector 底层实现深度解析:内存布局、扩容策略、移动语义与迭代器失效
开发语言·c++·算法
码匠许师傅1 小时前
【C++ 面试真题】聊聊 volatile 和 mutable
开发语言·c++·面试
(Charon)1 小时前
【C++】线程安全队列(二):生产者消费者模型与 condition_variable 阻塞等待
c语言·开发语言·c++
10岁的博客2 小时前
【C++题解】最多共线点问题:小飞拿蛋糕游戏的最优策略
c++
東隅已逝,桑榆非晚2 小时前
类和对象(中)
c++·笔记
wuminyu3 小时前
JDK21解决虚拟线程IO阻塞原理剖析
java·linux·c语言·jvm·c++
MC皮蛋侠客3 小时前
TDengine C++ 系列(4):时序查询——窗口聚合、插值、连接与时序函数
大数据·c++·tdengine
junuo3 小时前
10_C++内存分区与动态内存管理
c++·编程语言
欧特克_Glodon3 小时前
OpenCV计算机视觉开发入门与实践<二>:图像噪声与图像处理
c++·图像处理·opencv·计算机视觉
键盘会跳舞4 小时前
C++:函数对象与 std::function 源码级深度拆解——泛型算法的策略内核与可调用对象统一封装
c++·算法·仿函数