什么是 C++ cstdlib?
C++ 标准库头文件 (cstdlib in C++) 是 C++ 程序员使用最广泛的库头文件。即:standard librarian。它定义了一系列函数和宏,以实现跨团队、跨平台的高效且具有卓越表现的标准化 C++ 代码。
C++ 是一种广受欢迎的程序语言,它能崛起的最初原因就是可以与 C 语言兼容。C 语言曾经是且现在仍然是一种流行、成熟的程序语言。兼容意味着程序员更容易适应这种语言,更重要的是,C++ 开发人员还可以利用现有的 C 语言代码。
程序员不需要从核心函数开始重建所有内容,可以在按合理步调转向 C++ 时,重复使用成熟的代码块。具体来讲,他们能够利用 C 语言标准库头文件 stdlib.h
目前,C++ cstdlib 是原始 <stdlib.h> 的 C++ 增强版。
C++ cstdlib 与 stdlib.h
C 标准库头文件 <stdlib.h> 为 C 语言程序员提供可靠、高效的函数,以实现动态内存分配、数据类型转换、伪随机数生成、过程控制、搜索和排序、数学以及多字节或宽字符函数。除了这些常见例程外,还包括一些常用常数,以促进组织和平台间的代码标准化。
头文件和命名空间
最初的 C++ 规范 C++98 中规定:为正确使用从 C 语言库中继承的函数功能,采用 <c –name–> 头文件。例如,传统 C 程序中可能包括 “string.h”,而在 C++ 中,相同项目将采用对应的 。此外,随着命名空间的出现,新编写的 C++ 库函数不再在全局、非限定命名空间中定义。相反,它们只在标准命名空间 std 中声明。
如今,C++ 使用 cstdlib 就意味着保证 <stdlib.h> 中所含的全部内容均已在 std 命名空间中声明。因此,开发人员想要使用标准库中的函数时,他们必须先进行声明。可以显式声明,或通过指令声明,例如:
图 1:std::shared_ptr 用作双向链表的一部分
在左列中,由于没有在全局命名空间中声明,非限定使用 shared_ptr<> 报错。在中间列,命名空间显式声明,指向编译器可以查到的位置。在右列中,using namespace std 指令引导编译器至 std,搜索局部或全局范围内不存在的功能。注意:第三种(最右侧)方法不太好。还有一种方法是通过 std::shared_ptr 指令,仅添加 shared_ptr。
其它函数
C++ 库中的 cstdlib 包含由传统 C 语言函数、宏和数据类型构成的超集。以已声明的绝对值 (abs) 函数集为例。在 stdlib.h 中,C 语言定义了计算整数、长整数或长长整数值的绝对值 (abs) 所需的函数。但是没有获取单精度、双精度或更长双精度浮点数绝对值的函数。相反,这些类型需要在另一个常用 C 头文件 math.h内声明。
图 2:C 标准库中的绝对值函数
C++ cstdlib 头文件中 abs() 的相关重写包括上述所有情况。内容
C++ cstdlib 头文件包括若干成员函数、数据类型和常数值。下表列出了按头文件定义的函数。
图 3:转换函数
图 4:随机数相关函数
图 5:动态内存分配函数
图 6:搜索和排序函数
图 7:数学函数
图 8:结合多字节和宽字符使用的函数
常数和宏
C++ 库中的 cstdlib 包含多种宏和常数,以便于 C++ 语言开发和代码库标准化。例如,主函数返回的常数值如下:
EXIT_SUCCESS
EXIT_SUCCESS 常数可用作主函数的返回值,将调用框架解释为成功执行。虽然数值 0 也表示程序成功执行,但 EXIT_SUCCESS 针对的是具体实施。
EXIT_FAILURE
EXIT_FAILURE 常数也可用作主函数的返回值。然而,它表示的是执行失败的调用框架,可能存在严重的操作系统级错误。
图 11:主函数返回所用宏示例
例如,C++ cstdlib 定义的常数
NULL 表示指针常数为空,
RAND_MAX 表示 rand 命令生成的最大可能值,
MB_CUR_MAX 表示当前 locale 多字节字符的最大字节数。
结论
C++ 通用标准库头文件,也称为 C++ cstdlib,定义了用于数据类型转换、伪随机数生成、内存分配、搜索、排序、数学和处理宽或多字节字符的核心函数集。它还包括各种常数值形式的有用宏。在许多情况下,C++ 程序员使用来自 cstdlib 的类型、函数或常数,而不必包含此头文件,因为它已经包含在程序员使用的其它头文件中。当原先包含的头文件被删除,某些常数无法识别时,如果不知道某些类型和实用程序来自何处,后续可能会产生麻烦的编译错误。在这种情况下,可能需要使用 cstlib 来节省时间。