C++中,关于用 size_t 还是用 int,永远要统一标准。

news/2025/2/26 16:35:17

看以下例子: 

template<class T>
class MyArray
{

public:
	T*			_pData = null;				//指针,指向第一个元素
	size_t		_nElementCount = 0;			//无素个数

public:
	MyArray(const T* pt, const int nLen) {	}


	size_t length() const { return _nElementCount; }

	static _ByteArray pkg_to_memory(const MyArray<char>& arr) {

		_ByteArray b;
		 
		b.add(b.length());  //第一步写入数据长度,自动判断 length()类型 
		b.add((_byte*)arr._pData, b.length());  //写入数据

		return b;
	}

	static MyArray split_from_memory(_ByteArray&  ba) {

		MyArray<char> arr;
		 
		//第一步读取数组长度,根据最初定义的是int
		//读取一个int,指针向后移动sizoef(int)
		int n   = ba.readNext<int>(); 

		//............... //读取数据

		return MyArray<char>(ba.data(), n);
	}

};

嗯,这个程序运行了几个月,甚至几年,有一天,其中有好几个应用用pkg_to_memory打包了很多的数据,完全没问题。但是,后来为了兼容性,你改了程序,把int改为size_t:

你甚至根本都没有注重到 pkg_to_memory和split_from_memory这两个函数,但是:

现在是写入size_t 读取是int,在一段时间后,在另外几个程序中,你发觉程序保存数据后再打开会读取错误,崩溃了,检查N天后发现是把int 改成了size_t,然后马上又改成:

现在新的文件读取正常,老文件又崩溃了。因为老的文件是写入是int,读取是size_t,像下面这样:

结论:在你编写的所有自定类或者容器中,最好统一用size_t 。

况且int还有一个缺点,最大值:2147483647,如果是char或

byte,它最大支持为2G的文件(2,147,483,648 字节 = 2,048

MB = 2 GB)。

因为你的容器所能表示的最大长度是:2147483647。


http://www.niftyadmin.cn/n/5868939.html

相关文章

HAProxy- https、四层负载实现与 负载均衡关键技术

目录 1、HAProxy实现四层负载 四层负载示例 ACL示例-四层访问控制 2、HAProxy- https实现 HAProxy https实现 证书制作 https配置示例 修改后端服务器的日志格式 验证https 3、 负载均衡关键技术 1、什么是 Session 2、什么是 Session 共享 1、基于 Cookie 的 Ses…

python爬虫学习第十一篇爬取指定类型数据

最近在学习Python爬虫的过程中&#xff0c;尝试用爬虫获取指定类型的数据。今天&#xff0c;我想和大家分享一下我的实践过程和遇到的问题。 一、实现目标 目标是从一个网站的API接口获取不同类型的食品数据。 比如&#xff0c;第一步我想获取汉堡、小食、甜品等不同类型的数…

ROS的action通信——实现阶乘运算(三)

在ROS中除了常见的话题(topic&#xff09;通信、服务(server)通信等方式&#xff0c;还有action通信这一方式&#xff0c;由于可以实时反馈任务完成情况&#xff0c;该通信方式被广泛运用于机器人导航等任务中。本文将通过三个小节的分享&#xff0c;实现基于action通信的阶乘运…

Linux 第三次脚本作业

源码编译安装httpd 2.4&#xff0c;提供系统服务管理脚本并测试&#xff08;建议两种方法实现&#xff09; 一、第一种方法 1、把 httpd-2.4.63.tar.gz 这个安装包上传到你的试验机上 2、 安装编译工具 (俺之前已经装好了&#xff09; 3、解压httpd包 4、解压后的httpd包的文…

【前端基础】Day 1 HTML

总结&#xff1a; 1. Web标准的构成 2. 基本标签 目录 1. Web标准的构成 2. 基本标签 2.1快捷键 2.2.1标题标签 2.2.2段落和换行标签 2.2.3文本格式化标签 2.2.4div和span标签 2.3.1 图像标签和路径 2.3.2路径 2.3.3超链接标签 2.4注释标签 2.5特殊字符 1. Web标准…

【前沿探索篇九】【DeepSeek具身智能:机器人操作学习框架】

第一章 具身智能的"五感觉醒" 1.1 多模态感知的神经交响乐 我们的多模态编码器就像机器人的大脑皮层,把不同传感器数据拧成一股绳: class MultimodalEncoder(nn.Module):def __init__(self):sel

电脑不能正常启动了怎么办?查看解决方法

电脑是我们日常生活和工作中不可缺少的工具&#xff0c;但有时候我们可能会遇到电脑不能正常启动的问题&#xff0c;这会给我们带来很多麻烦和困扰。那么&#xff0c;电脑不能正常启动的原因有哪些&#xff0c;又该如何解决呢&#xff1f;本文将为你介绍几种常见的情况和对应的…

STM32【3】芯片的底层组成概论

关于单片机的组成 单片机的意思是&#xff0c;小小计算电脑&#xff0c;麻雀虽小&#xff0c;五脏俱全&#xff0c;里面包含了CPU&#xff0c;ROM&#xff0c;RAM&#xff0c;各种外设。 CPU地位最高&#xff0c;可以访问ROM和RAM&#xff0c;Flash&#xff0c;GPIO等外设&…