用户登录
用户注册

分享至

C++重定义变量类型

  • 作者: 冰雨云
  • 来源: 51数据库
  • 2021-09-21

c++重定义变量类型:这种做法主要是用来进行跨平台适配。不同运行环境下面,例如32位,64位系统,某些例如int、long、size_t等类型说明符虽然一样,但是实际占用的位宽却是完全不一样的。

数据的位宽决定了某个变量数据量的承载范围。数据量的承载范围在算法工程中是非常重要的事情,它决定了处理数据的容量范围,决定了硬盘数据和内存数据的存储方式。

如果切换平台产生了实际数据位宽和设计数据位宽不一致,算法程序是无法正常运行的,实际中可能随时会出现诡异的崩溃问题。如果设计之初不重视这个问题的话,后续复查崩溃问题的原因事件非常痛苦的事情。切记,和内存相关的崩溃问题,都是算法领域里面首先需要避免的问题。

正确的解决方案:

所以,我们研发算法工程之前,需要花费一定的工作量,将可能需要的所有常用类型进行重定义。

-----重定义类型的名称需要明确无歧义

-----重定义类型对应的实际类型是唯一性的,不随平台而变动

示例:

typedef signed char int8;
typedef unsigned char uint8;
typedef signed short int16;
typedef unsigned short uint16;
typedef signed int int32;
typedef unsigned int uint32;
//typedef signed long long int64;
//typedef unsigned long long uint64;
typedef  uint64_t uint64;
typedef  int64_t int64;

注意:各个平台对于64位的强定义(longlong类型)的标准不是很统一,不同的编译器的支持也是不一样。c++的标准类型说明头已经做到跨平台兼容。

所以,提前做好类型的定义,可以确保后续平台迁移的时候,设计的内存和实际的内存保持一致,这样内存位宽方面基本不会出现问题了。后续的研发过程中如果出现了更多需要自定义的类型,可以按照同样的道理进行重定义。

这样做的还有个好处是定义个使用进行分开设计,假如后续需要对某个算法的位宽进行改动,实际上只需要对某个自定义类型的说明符的定义进行更改,而不需要对实际的业务代码进行修改。
软件
前端设计
程序设计
Java相关