宁波网站关键词优化代码,百度推广渠道代理,中小企业网站制作过程中要注意什么,企业通过网络推广成功的案例2023年11月6日#xff0c;周一下午 目录
POD类型的定义标量类型POD类型的特点POD类型的例子整数类型#xff1a;C 风格的结构体#xff1a;数组#xff1a;C 风格的字符串#xff1a;std::array:使用 memcpy 对 POD 类型进行复制把POD类型存储到文件中#xff0c;并从文…2023年11月6日周一下午 目录
POD类型的定义标量类型POD类型的特点POD类型的例子整数类型C 风格的结构体数组C 风格的字符串std::array:使用 memcpy 对 POD 类型进行复制把POD类型存储到文件中并从文件中再次读取 POD类型的定义
只包含标量类型如整数、浮点数、指针等或者其他 POD 类型的成员。没有用户自定义的构造函数、析构函数或拷贝控制成员没有虚函数或虚继承可以通过 memset 和 memcpy 进行内存的简单复制和初始化。
这些标准在 C03 标准中被定义。根据这个定义POD 类型可以被视为简单的、平凡的数据类型可以进行一些底层的操作如内存复制、比较和序列化等。POD 类型通常用于与 C 语言进行交互、进行低级别的内存操作或进行数据序列化和传输。 标量类型
在计算机科学中标量类型是指代表单个值的基本数据类型它们表示的是一个简单的数值或者是一个指向内存中单个位置的指针。标量类型不需要进一步分解或组合它们是最基本的数据类型通常由编程语言提供原生支持。
在 C 中以下是一些常见的标量类型
整数类型如 int, char, short, long等浮点数类型如 float, double等指针类型如 int*, char*等枚举类型enum布尔类型bool
标量类型可以直接进行算术运算、比较和赋值等操作而不需要进一步的处理。相比之下非标量类型如数组、结构体、类等可能由多个标量类型或其他非标量类型组成。
需要注意的是标量类型通常不包括 C 的类类型即用户自定义的类型因为类类型可能包含成员函数、非标量类型的成员等。标量类型主要用于表示基本的单个数值或指针它们在底层的内存表示和操作上相对简单。 POD类型的特点
可以使用memset来清空可以使用memcpy来复制可以存储到文件中、也可以从文件中读取 POD类型的例子
当一个类型满足 PODPlain Old Data的定义时它可以被认为是一个 POD 类型。
以下是一些常见的示例
整数类型
int num;
这是一个简单的整数类型只包含标量类型的成员没有自定义的构造函数、析构函数或拷贝控制成员。
C 风格的结构体
struct Point {int x;int y;
};
这个结构体只包含两个整数成员没有自定义的构造函数、析构函数或拷贝控制成员。
数组
int arr[10];
这是一个包含 10 个整数的数组它只包含标量类型的成员。
C 风格的字符串
char str[20];
这是一个字符数组可以用于存储字符串也是一个 POD 类型。
std::array:
arrayint, 5 std_array {1, 2, 3, 4, 5};
需要注意的是C 的标准库提供的许多类型例如 std::vector、std::string不属于 POD 类型因为它们包含了额外的成员和复杂的行为。POD 类型主要用于与 C 语言进行交互或者在需要进行底层内存操作的情况下使用。 使用 memcpy 对 POD 类型进行复制
#include cstring
#include iostreamstruct Point {int x;int y;
};int main() {Point p1 {10, 20};Point p2;// 使用 memcpy 复制 p1 的内存到 p2std::memcpy(p2, p1, sizeof(Point));// 检查复制结果std::cout p2.x: p2.x std::endl; // 输出 10std::cout p2.y: p2.y std::endl; // 输出 20return 0;
} 把POD类型存储到文件中并从文件中再次读取
#include iostream
#include fstreamstruct Point {int x;int y;
};int main() {Point p1 {10, 20};Point p2;// 将 Point 对象存储到文件中std::ofstream outfile(point.bin, std::ios::binary);if (outfile.is_open()) {outfile.write(reinterpret_castchar*(p1), sizeof(Point));outfile.close();}// 从文件中读取 Point 对象std::ifstream infile(point.bin, std::ios::binary);if (infile.is_open()) {infile.read(reinterpret_castchar*(p2), sizeof(Point));infile.close();}// 检查读取结果std::cout p2.x: p2.x std::endl; // 输出 10std::cout p2.y: p2.y std::endl; // 输出 20return 0;
} 查看生成的二进制文件point.bin