独立与宿主实现
C++ 标准定义了两种实现:宿主 (hosted) 与独立 (freestanding) 实现。 C++ 标准对宿主实现所规定的标准库头文件集合比对独立实现所规定的大很多。独立实现中程序可能在没有操作系统的情况下运行。
针对多线程执行与数据竞争的规定
|
(C++11 起) |
针对 main 函数的要求
独立 | 宿主 |
---|---|
独立实现中,是否要求程序定义 main 函数是由实现定义的。启动与终止过程是由实现定义的;启动过程中包含执行具有静态存储期的命名空间作用域对象的构造函数;终止过程中包含执行具有静态存储期的对象的析构函数。 | 宿主实现中,程序必须包含一个名为 main 的全局函数。程序执行时启动一个主执行线程,在其中调用 main 函数,并且具有静态存储期的变量将在其中被初始化和销毁。
|
针对标准库头文件的规定
独立实现拥有由实现定义的头文件集合。此集合至少包含下表中的头文件:
类型 | <cstddef> |
实现的属性 | <limits> <cfloat> <climits> (C++11 起) <version> (C++20 起) |
整数类型 | <cstdint> (C++11 起) |
启动与终止 | <cstdlib> (部分)[1] |
动态内存管理 | <new> |
类型鉴别 | <typeinfo> |
源文件位置 | <source_location> (C++20 起) |
异常处理 | <exception> |
初始化器列表 | <initializer_list> (C++11 起) |
比较 | <compare> (C++20 起) |
协程支持 | <coroutine> (C++20 起) |
其他运行时支持 | <cstdarg> |
基础库概念 | <concepts> (C++20 起) |
类型特征 | <type_traits> (C++11 起) |
位操作 | <bit> (C++20 起) |
原子类型 | <atomic> (C++11 起)[2] |
<ciso646> (C++11 起)(C++20 前) | |
已弃用的头文件 | <cstdalign> <cstdbool> (C++11 起)(C++20 前) |
- ↑ 头文件
<cstdlib>
的受支持版本应当至少声明函数 std::abort 、 std::atexit 、 std::exit 、 std::at_quick_exit 及 std::quick_exit (C++11 起) 。 - ↑ 始终免锁的整数原子类型的支持,以及类型别名 std::atomic_signed_lock_free 与 std::atomic_unsigned_lock_free 的存在性在自立实现是实现定义的。 (C++20 起)
引用
- C++17 standard (ISO/IEC 14882:2017):
- 4.1 Implementation compliance (p: 5)
- 4.7 Multi-threaded executions and data races (p: 15)
- 6.6.1 Main function (p: 66)
- 20.5.1.3 Freestanding implementations (p: 458)
- C++14 standard (ISO/IEC 14882:2014):
- 1.4 Implementation compliance (p: 5)
- 1.10 Multi-threaded executions and data races (p: 11)
- 3.6.1 Main function (p: 62)
- 17.6.1.3 Freestanding implementations (p: 441)
- C++11 standard (ISO/IEC 14882:2011):
- 1.4 Implementation compliance (p: 5)
- 1.10 Multi-threaded executions and data races (p: 11)
- 3.6.1 Main function (p: 58)
- 17.6.1.3 Freestanding implementations (p: 408)
- C++03 standard (ISO/IEC 14882:2003):
- 1.4 Implementation compliance (p: 3)
- 3.6.1 Main function (p: 43)
- 17.4.1.3 Freestanding implementations (p: 326)