C++ CSTDLIB
在C++中,cstdlib是什么
C++标准库头文件(cstdlib在C++中)是包含该语言最广泛使用的库之一的头文件。该头文件指定了一组方法和宏,以帮助团队和技术编写高效、高性能、标准化的C++代码。
C ++是一种广泛使用的编程语言,其成功的主要原因之一是与C兼容,而在当时,C仍然是一种著名且非常好的语言。这种灵活性不仅使开发人员更易于适应,而且还使C ++开发人员能够利用现有的C代码。
开发人员无需从零开始,就能通过相对快速地转换到C ++而重复使用成熟的代码块。特别是,他们能够使用C标准库头文件stdlib.h。如今,在C ++中,cstdio是最初的< stdlib.h>的改进版本。
cstdlib与stdlib.h
标准C库头文件< stdlib.h>为C程序员提供了可靠和有效的内存动态分配、数据类型转换、伪随机数生成、进程控制、搜索和排序、数学以及多字节或宽字符操作。除了这些常用技术之外,还经常使用常量以提高代码在各行业和技术中的一致性。
命名空间和头文件
最初的C ++规范C ++ 98指定了使用。此外,随着命名空间的引入,新编写的C ++库函数不再在全局未定义的命名空间中声明。它们将只在标准命名空间std中定义。
从长远看,对C ++使用cstdio意味着< stdlib.h>中的所有代码都在std命名空间中声明。因此,当程序员希望使用标准库函数时,他们必须进行限定。这可以明确地完成,也可以通过using指令完成,如下所示:
图1 说明了std::shared_ptr作为双向链表组件的使用。
左列中对shared ptr<>的未定义使用导致错误,因为该语句不属于全局命名空间。中列清楚地指定了命名空间,告知编译器可以在哪里找到它。最右列的using namespace std命令指示编译器在局部或全局域中找不到的程序中查找std。值得强调的是,第三种(最右列)选择被认为是不道德的。另一种不经提前提到的方法是使用std::shared_ptr指令添加仅shared_ptr。
其他特性
C++库的cstdlib提供了经典C函数、宏和数据类型的子集。绝对值(abs)函数的声明集是其中的一个实例。C规定了用于确定整数、长整数或长长整数值的绝对值(abs)所需的过程,这些过程定义在stdlib.h中。然而,并没有一种方法可以确定浮点数、双精度数或长双精度数的绝对值。这些类型相反在另一个常用的C头文件math.h中声明。
绝对值数据类型 | 函数 | C头文件 |
---|---|---|
整数 | int abs(int x) | stdlib.h |
长整数 | long labs(long x) | stdlib.h |
长长整数 | long long llabs(long long x) | stdlib.h |
浮点数 | float fabsf(float x) | math.h |
双精度浮点数 | double fabs(double x) | math.h |
长双精度浮点数 | long double fabsl(long double x) | math.h |
图2: C标准库绝对值函数
所有以下实例都由C++头文件的cstdlib中对应的abs()重载覆盖。
包括了什么内容
C++头文件cstdlib包含各种成员函数、数据类型和常量值。头文件定义的函数在下表中进行了描述。
转换函数
转换函数 | 解释 |
---|---|
atol | 通过将字符串转换为长整型值来进行工作。 |
atof | 从字符串中创建一个双精度浮点数。请记住返回值不是浮点数。 |
atoi | 该函数将字符串转换为整型。 |
下面列出的功能成为了对上面列出的功能更可靠的方法。
转换函数 | 解释 |
---|---|
stltoul | 此函数将字符串转换为无符号长整型。 |
strtod | 此函数将字符串转换为双精度浮点数。 |
strtoull | 此函数将字符串转换为无符号长长整型。 |
strtol | 此函数将字符串转换为长整型。 |
strtoll | 此函数将字符串转换为长长整型。 |
与随机数相关的功能
随机数 | 解释 |
---|---|
random | 一个在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函数的返回值,被请求的框架解释为执行成功。虽然0也表示程序的完美执行,但EXIT_SUCCESS是特定于实现的。
EXIT_FAILURE
EXIT_FAILURE常量也作为main函数的返回值。然而,它向调用框架传达了实现失败的消息,可能是由于主要的操作系统故障。
NULL表示空指针常量,RAND MAX表示由rand命令生成的最大允许值,MB CUR MAX表示当前语言环境下多字节字符的最大字节数。这些都是C++中的常量值,由cstdlib定义。
结论
C++通用标准库的头文件通常被缩写为cstdlib。它提供了一系列基本操作,用于数据类型转换、伪随机数生成、内存分配、搜索、排序、数学运算以及处理宽字符或多字节字符。此外,它还包含一些方便的宏,用来表示固定的数值。C++程序员经常使用cstdlib中的类型、方法或常量,而无需直接包含该头文件,因为其他头文件已经包含了它。然而,对于特定的类型和工具来自何处的不了解,可能会在稍后编译错误出现时产生问题,当早期包含的头文件被移除时,一个变量可能会出现“未被识别”的情况。了解cstdlib的必要性有助于在这种情况下减少时间的浪费。