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

目录

1.基本的内置类型

2.typedef 声明

3.枚举类型

4.类型转换


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

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

1.基本的内置类型

C++重新入门-C++数据类型_第1张图片

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

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

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

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

C++重新入门-C++数据类型_第2张图片

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(myDouble);

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

class Base {
    // ...
};

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

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

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

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

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

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

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

你可能感兴趣的:(c++,开发语言)