当前位置: 首页 > article >正文

C++重新入门-C++数据类型

目录

1.基本的内置类型

2.typedef 声明

3.枚举类型

4.类型转换


使用编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着,当您创建一个变量时,就会在内存中保留一些空间。

您可能需要存储各种数据类型(比如字符型、宽字符型、整型、浮点型、双浮点型、布尔型等)的信息,操作系统会根据变量的数据类型,来分配内存和决定在保留内存中存储什么。

1.基本的内置类型

下表显示了各种变量类型在内存中存储值时需要占用的内存,以及该类型的变量所能存储的最大值和最小值。

注意:不同系统会有所差异,一字节为 8 位。

注意:默认情况下,int、short、long都是带符号的,即 signed。

注意:long int 8 个字节,int 都是 4 个字节,早期的 C 编译器定义了 long int 占用 4 个字节,int 占用 2 个字节,新版的 C/C++ 标准兼容了早期的这一设定。

2.typedef 声明

typedef 是 C++ 中用于为已有类型创建新名称的关键字。它的主要目的是为了提高代码的可读性和灵活性,尤其是在处理复杂的类型声明时。

typedef 的一般语法形式如下:

typedef existing_type new_type_name;

这里的 existing_type 是已有的数据类型,而 new_type_name 是你为这个数据类型定义的新名称。

在现代 C++ 中,推荐使用 using 关键字来实现类型别名,因为它提供了更多的功能。例如:

using IntPointer = int*;
using Person = struct {
    int age;
    char gender;
};

 这两种形式在实质上是等效的。

3.枚举类型

在C++中,枚举类型是一种用户自定义的数据类型,用于表示一组具名的整数常量。它可以提高代码的可读性,使得变量只能取枚举中列举的值之一。

枚举类型的一般形式如下:

enum 枚举名 {
    标识符[=整型常数],
    标识符[=整型常数],
    // ...
    标识符[=整型常数]
} 枚举变量;

如果省略 "=整型常数" 部分,枚举成员的值默认从0开始,每个成员的值比前一个成员的值大1。如果为枚举成员赋予了初始值,后续的成员值将在前一个成员的基础上递增。

例如:

enum color { red, green, blue } c;
c = blue;
// 默认情况下,red的值为0,green的值为1,blue的值为2

enum color { red, green=5, blue };
// red的值为0,green的值为5,blue的值为6

这使得在编程中,你可以使用更有意义的标识符而不是硬编码的整数值,提高了代码的可读性和维护性。

4.类型转换

类型转换是将一个数据类型的值转换为另一种数据类型的值。

C++ 中有四种类型转换:静态转换、动态转换、常量转换和重新解释转换。

静态转换(Static Cast): 这是最基本的转换,用于在编译时进行类型转换。它主要用于较为明显的转换,例如数值类型之间的转换,但不提供运行时的安全性检查。

double myDouble = 3.14;
int myInt = static_cast<int>(myDouble);

动态转换(Dynamic Cast): 主要用于处理继承关系中的类型转换。它在运行时检查类型信息,提供了安全性检查,但仅在多态类型中才有意义。

class Base {
    // ...
};

class Derived : public Base {
    // ...
};

Base* basePtr = new Derived;
Derived* derivedPtr = dynamic_cast<Derived*>(basePtr);

常量转换(Const Cast): 主要用于添加或移除变量的 const 修饰符。这种转换主要用于处理 const 修饰符的问题,但使用时需要谨慎,避免破坏数据的常量性。

const int i = 10;
int& r = const_cast<int&>(i); // 常量转换,将const int转换为int

重新解释转换(Reinterpret Cast): 这是最危险的类型转换,它通常用于不同类型之间的低级别位模式操作。它会忽略类型之间的任何关系,慎用。

int myInt = 42;
double* doublePtr = reinterpret_cast<double*>(&myInt);

所以以后转换类型需谨慎。最好不要不管三七二十一就用 a=(int)b;这种强制转换啦!


http://www.kler.cn/a/233616.html

相关文章:

  • JavaScript高级程序设计基础(四)
  • react动态路由
  • python实战(八)——情感识别(多分类)
  • Autosar CP DDS规范导读
  • 想租用显卡训练自己的网络?AutoDL保姆级使用教程(PyCharm版)
  • Java-Redisson分布式锁+自定义注解+AOP的方式来实现后台防止重复请求扩展
  • 【深度学习】实验7布置,图像超分辨
  • 论文阅读-Automated Repair of Programs from Large Language Models
  • Python+django企业人力资源公司人事管理系统lq9t2
  • 三、搜索与图论
  • 在 MacOS M系列处理器上使用 Anaconda 开发 Oralce 的Python程序
  • Redis缓存高可用集群
  • Python列表中的insert功能及用法举例
  • 【Flink】FlinkSQL实现数据从Kafka到MySQL
  • 微信小程序,IOS兼容日期格式问题,注意ios高低版本兼容性不一致
  • 【QT+QGIS跨平台编译】之二十八:【Protobuf+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
  • 第62讲商品搜索动态实现以及性能优化
  • python实现基数排序
  • 苹果macbook电脑删除数据恢复该怎么做?Mac电脑误删文件的恢复方法
  • 物资捐赠管理系统
  • 8种基本类型的包装类(与String的转换)
  • 降准是什么意思?降准对股市有哪些影响?
  • 第70讲axios后端请求工具类封装
  • MySQL单主模式部署组复制集群
  • 机器学习聚类算法
  • Collectors.toMap