C++ cstdlib

17 Mar 2025 | 6 分钟阅读

在 C++ 中,cstdlib 是什么?

cstdlib in C++

C++ 标准库头文件 (C++ 中的 cstdlib) 是包含该语言最广泛使用的库之一的头文件。该头文件指定了一组方法和宏,以帮助团队和技术编写高效、高性能、标准化的 C++ 代码。

cstdlib in C++

C++ 是一种广泛使用的编程语言,其成功的主要原因之一是与 C 兼容,当时 C 是一种非常流行的语言,至今仍然如此。这种灵活性不仅使编码人员更容易适应,而且还允许 C++ 开发人员利用现有的 C 代码。

开发人员无需从头开始,而是能够重用成熟的代码块,从而相对较快地迁移到 C++。他们特别能够利用 C 标准库头文件 stdlib.h。如今,C++ 中的 cstdlib 是原始 <stdlib.h> 的改进版 C++ 版本。

cstdlib 与 stdlib.h

C 标准库头文件 <stdlib.h> 为 C 程序员提供了可靠有效的操作,用于动态内存分配、数据类型转换、伪随机数生成、进程控制、搜索和排序、数学以及多字节/宽字符处理。除了这些基本技术之外,还有常用的常量,以提高各行业和技术之间的代码一致性。

命名空间和头文件

原始 C++ 规范 C++98 规定,使用 <c -name-> 头文件是使用从 C 库继承的函数的正确方法。例如,在标准 C 语言中,可以使用 "string.h",而在 C++ 中的类似项目将包含 <cstring>。此外,随着命名空间的引入,新编写的 C++ 库函数不再在全局、未定义命名空间中声明。它们将只在标准命名空间 std 中定义。

从长远来看,在 C++ 中使用 cstdlib 意味着 <stdlib.h> 中的所有代码都在 std 命名空间中声明。因此,当程序员希望使用标准库函数时,必须对其进行限定。这可以通过显式限定或使用 using 指令来完成,如下所示:

cstdlib in C++

图 1 说明了 std::shared_ptr 作为双向链表组件的使用。

左栏中 undefined 的 shared ptr<> 使用会导致错误,因为该语句不属于全局命名空间。中间列清楚地指定了命名空间,指示编译器可以从何处找到它。右栏中的 using namespace std 命令指示编译器在 std 中查找在本地或全局域中不存在的过程。应强调的是,第三种(最右侧)选择被认为是不道德的。另一种之前未提及的方法是使用 std::shared_ptr 指令,只添加 shared_ptr。

附加功能

C++ 库的 cstdlib 提供了一部分经典的 C 函数、宏和数据类型。声明的绝对值 (abs) 函数集就是一个例子。C 在 stdlib.h 中规定了确定整数、长整数或长长整数值的绝对值 (abs) 所需的过程。但是,无法获取浮点数、双精度数或长双精度数的绝对值。这些类型被声明在 math.h 中,这是另一个常用的 C 头文件。

绝对值数据类型函数C 头文件
Integerint abs(int x)stdlib.h
长整数long labs(long x)stdlib.h
长长整数long long llabs(long long x)stdlib.h
Floatfloat fabsf(float x)math.h
Doubledouble fabs(double x)math.h
长双精度long double fabsl(long double x)math.h

图 2:C 标准库绝对值函数

以下所有示例都由 C++ 头文件 cstdlib 中的相应 abs() 重载函数覆盖。

具体包含哪些内容?

C++ 头文件 cstdlib 包含各种成员函数、数据类型和常量值。头文件中定义的函数将在下表中描述。

转换函数

转换函数说明
atol将字符串转换为长整型值。
atof从字符串创建双精度数。请记住,返回值不是 float。
atoi此函数将字符串转换为整数。

下面列出的函数是上述函数的更可靠的替代方法。

转换函数说明
stltoul此函数将字符串转换为无符号长整型。
strtod此函数将字符串转换为双精度数。
strtoull此函数将字符串转换为无符号长长整型。
strtol此函数将字符串转换为长整型。
strtoll此函数将字符串转换为长长整型。

与随机数相关的函数

随机数说明
随机返回 C 中非标准的整数的函数(由 POSIX 提供)
srandom设置随机数生成器的种子(非标准 C,POSIX)
rand此函数生成伪随机整数。
srand设置随机数生成器的种子值。

动态内存分配函数

内存分配说明
calloc使用堆分配内存(指定大小和计数;初始化内存)
free释放内存。
malloc使用堆分配内存(指定整个块大小)
realloc修改先前分配的内存量。

搜索和排序函数

搜索和排序说明
qsort可以使用快速排序对数组进行排序。
bsearch在数组上实现二分搜索。

数学函数

数学函数说明
div将整数除以其商和余数得到结果。
abs确定整数的绝对值。
ldiv长整数除法,输出商和余数
labs查找长整数的绝对值。

使用这些函数处理多字节和宽字符。

多字节/宽字符函数说明
wctomb将多字节字符转换为宽字符。
mblen返回多字节字符的大小。
mbstowcs将多字节字符序列转换为宽字符序列。
mbtowc将多字节字符转换为宽字符。
wcstombs将宽字符序列转换为多字节字符序列。

宏和常量

C++ 库的 cstdlib 包含许多宏和常量,有助于 C++ 开发和代码库的标准化。例如,考虑 main 函数返回的常量值。

EXIT_SUCCESS

EXIT_SUCCESS 常量可以作为 main 函数的返回值,请求框架将其解释为成功执行。尽管零也表示程序执行成功,但 EXIT_SUCCESS 是实现特定的。

EXIT_FAILURE

EXIT_FAILURE 常量也作为 main 函数的返回值。但是,它会向调用框架传达实现失败,可能是由于重大的操作系统故障。

cstdlib in C++

其他常量值包括 NULL(表示空指针常量)、RAND_MAX(对应于 rand 命令生成允许的最大值)以及 MB_CUR_MAX(表示当前区域设置的多字节字符的最大字节数)。

结论

C++ 通用标准库的头文件,在 C++ 中缩写为 cstdlib,提供了一组基本操作,用于数据类型转换、伪随机数生成、内存分配、搜索、排序、数学以及处理宽字符或多字节字符。它还包含几种固定值的宏。C++ 程序员经常在不需要包含此头文件的情况下使用 cstdlib 中的类型、方法或常量,因为它包含在他们可以使用的其他头文件中。不知道特定类型和实用程序来自哪里,可能会导致以后出现令人头痛的编译错误,当一个先前包含的头文件被删除,并且一个可观测值令人震惊地不再被识别时。了解 cstlib 可能很有用,这有助于在这种情况下节省时间。