独立与宿主实现

来自cppreference.com
< cpp


C++ 标准定义了两种实现:宿主独立实现。C++ 标准对宿主 实现所规定的标准库标头集合比对独立 实现所规定的大很多。独立 实现中程序可能在没有操作系统的情况下运行。

实现的种类由实现定义。预定义宏 __STDC_HOSTED__ 在宿主实现中会展开成 1,在独立实现中会展开成 0(C++11 起)

针对多线程执行与数据竞争的规定

独立 宿主
独立 实现下,程序能否拥有多于一个执行线程由实现定义。 宿主 实现下,C++ 程序可以拥有同时运行的多于一个线程
(C++11 起)

针对 main 函数的要求

独立 宿主
独立 实现中,是否要求程序定义 main 函数是由实现定义的。启动与终止过程是由实现定义的;启动过程中包含执行具有静态存储期命名空间作用域对象的构造函数;终止过程中包含执行具有静态存储期的对象的析构函数 宿主 实现中,程序必须包含一个名为 main 的全局函数。程序执行时启动一个主执行线程,在其中调用 main 函数,并且具有静态存储期的变量将在其中被初始化和销毁。

针对标准库标头的规定

独立 实现拥有由实现定义的标头集合。此集合至少包含下表中的标头。

对于部分独立的标头,独立实现只需要提供对应概要中的部分实体:

  • 如果实体备注为 // 独立,那么保证会提供它。
  • 如果实体(函数或函数模板)备注为 // 独立或弃置,那么保证会提供或弃置它。
(C++26 起)
  • 如果实体在某个概要以 // 全部独立// 基本独立 开始的标头中声明,那么在该实体本身没有被备注的情况下保证会提供它。

独立实现需要的标头

组件 标头  是否独立 
语言支持 通用定义 <cstddef> 全部
C 标准库 <cstdlib> 部分
实现的属性 <cfloat>
<climits> (C++11 起)
<limits>
<version> (C++20 起)
全部
整数类型 <cstdint> (C++11 起) 全部
动态内存管理 <new> 全部
类型鉴别 <typeinfo> 全部
源代码位置 <source_location> (C++20 起) 全部
异常处理 <exception> 全部
初始化器列表 <initializer_list> (C++11 起) 全部
比较