2. C++数据类型

C++基本数据类型

七种C++基本数据类型

数据类型关键字
布尔型bool
字符型char
整型int
浮点型float
双浮点型float
无类型void
宽字符型wchar_t

wchar_t是这样定义的:

typedef short int wchar_t;

数据之前的修饰符

在数据类型之前还可以用一些类型修饰符进行修饰,一些修饰符可以叠加修饰:

修饰符描述示例
signed表示有符号类型(默认)signed int x = -10;
unsigned表示无符号类型unsigned int y = 10;
short表示短整型short int z = 100;
long表示长整型long int a = 10000;
const表示常量,值不可修改const int b = 5;
volatile表示变量可能被意外修改,禁止编译器优化volatile int c = 10;
mutable表示类成员可以在const对象中修改mutable int counter;

short就等于short int;long就等于long int。此外还有long long或者long long int。

数据所占的内存大小

不同的变量类型在内存中占用不同的空间大小,而且最大值与最小值也不相同。对于不同的系统,占用内存大小和取值范围可能有所不同。常见的一些数据类型列在表中,可以使用

cout << sizeof(int) << endl;

来查看本机器各种数据类型所占的空间大小。

类型占用字节数(1Byte=8bit)取值范围
bool布尔类型1true或false
char字符类型1-128到127或0到255
int整型4-2147483648到2147483647
long长整型4或8取决于平台
short短整型2-32768到32767
float单精度浮点数4约±3.4e±38(6-7位有效数字)
double双精度浮点数8约±1.7e±308(15位有效数字)

C++11新增特性

C++11的新增特性有:

数据类型描述示例
auto自动类型推断auto x = 10;
decltype获取表达式的类型decltype(x) y = 20;
nullptr空指针常量int* ptr = nullptr;
std::initializer_list初始化列表类型std::initializer_list<int> list = {1, 2, 3};
std::tuple元组类型,可以储存多个不同类型的值std::tuple<int, float, char> t(1, 2.0, 'a');

派生数据类型

一些基础的派生数据类型

数据类型描述示例
数组相同类型元素的集合int arr[5] = {1, 2, 3, 4, 5};
指针存储变量内存地址的类型int* ptr = &x;
引用变量的别名int& ref = x;
函数函数类型,表示函数的签名int func(int a, int b);
结构体用户定义的数据类型,可以包含多个不同数据类型的成员Struct Point{int x, int y};
用户定义的数据类型,支持封装、继承和多态class Myclass{…};
联合体多个成员共享同一块内存union Data{int i; float f; …};
枚举用户定义的整数常量集合enum Color{RED, GREEN, BLUE};

STL标准库类型

数据类型描述示例
std::string字符串类型std::string s = “Hello”;
std::vector动态数组std::vector<int> v = {1, 2, 3};
std::array固定大小数组(C++11引入)std::array<int ,3> a = {1, 2, 3};
std::pair储存两个值的容器std::pair<int, float> p(1, 2.0);
std::map键值对容器std::map<int, std::string> m;
std::set唯一值集合std::set<int> s = {1, 2, 3};

类型别名

别名描述示例
typedef为现有类型定义别名typedef int MyInt;
using为现有类型定义别名(C++11引入)using MyInt = int;

类型转换

类型转换是将一个数据类型的值转换为另一种数据类型的值。C++有四种类型转换:静态转换、动态转换、常量转换和重新解释转换。

静态转换

静态转换是将一种数据类型的值强制转换为另一种数据类型的值,常用在比较相似的类型之间的转换,例如float和int之间的转换。

静态转换不进行任何运行时类型检查,可能导致运行时错误。例:

int i = 10;
float f = static_cast<float>(i); // 静态将int类型转换为float类型

动态转换

动态转换(dynamic_cast)是C++中用于在继承层次结构中进行向下转换(downcasting)的一种机制。

动态转换通常用于将一个基类指针或引用转换为派生类指针或引用。

动态转换在运行时进行类型检查。如果转换失败,对于指针类型会返回nullptr,对于引用类型则会抛出std::bad_cast异常。

语法:

dynamic_cast<目标类型>(表达式)
//目标类型:必须是指针或者引用类型
//表达式:需要转换的基类指针或引用

相关内容可以在面向对象程序设计中查阅。

常量转换

常量转换用于将const类型的对象转换为非const类型的对象,它只能转换掉const属性,不能改变对象的类型。例:

const int i = 10;
int& r = const_cast<int&>(i);

重新解释转换

重新解释转换将一个数据类型的值重新解释为另一个数据类型的值,通常用于在不同的数据类型之间进行转换。

重新解释转换不进行任何类型检查,因此可能会导致未定义的行为。例:

int i = 10;
float f = reinterpret_cast<float&>(i);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蒜了吧先

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值