c++中的size_t 和 size_type, typedef和decltype

c++中的size_t 和 size_type, typedef和decltype

size_t, size_type, key_type, value_type, mapped_type, decltype, typeof,type type type!

在学习C++的过程中,经常会看到size_t, size_type, decltype, typeof…各种type!已经混淆了。为了梳理一遍知识也为了日后自己能更方便的回忆,决定以博客的形式整理一下。

1. typedef和decltype

(1)typedef
关键字typedef其实就是类型别名,它是某种类型的同义词
比如:

typedef double my_double;    //my_double是double的同义词
typedef my_double your_double, *his_double;   
//your_double是double的同义词,*his_double是double*的同义词

在定义的类型名别后,别名和类型名的作用就一模一样了,比如:

double a;
my_double a;//两句的效果是一样的

所以总结抽闲出typedef的规则:

typedef 原始数据类型 你想要的类型别名, 类型别名2, 指针类型别名3*;

(2)decltype (declare type,声明类型)
decltype的作用是选择并返回操作数的数据类型。举个很简单的例子:
//你现在有一个变量A,你不知道它是什么类型的,你想声明一个和A相同类型的数据,就可以这么做:

decltype(A) B;

如果A的类型是int,那么上面这条语句就等同于下条:

int B;

2. size_t 和 size_type

size_t and size_type是为了独立于及其设备而定义的类型;比如在这个电脑上int为2字节,另一台上电脑是4字节,所以经常使用size_t和size_type而不是int,unsigned可以让程序有更好的移植性
(1)size_t (全局类型)
在学习C++primer的过程中,一直能看到size_t, size_type,都已经乱了,所以我用一个最简单的方法查看size_t到底是什么:用visual studio 2019编辑器把size_t打出来看编辑器给的提示是什么:
在这里插入图片描述

办法很傻但很有效果有没有?
size_t其实就是unsigned int 的类型别名!
unsigned int是什么就不用多说了吧?

(2)size_type(属于容器概念)
在这里插入图片描述

显而易见,size_type和size_t本质上是一样的,但是size_t是在全局命名空间里,size_type在string里(string::size_type)或vector命名空间里(vector::size_type)

size_type是由vector和string类型定义的类型用于保存任意string对象或vector对象的长度,它被设计的足够大以便能够存储任意对象的大小,同样的它也是unsigned int类型。

(3)size_t 和 size_type的区别

  • size_t是全局定义的类型,size_type是标准容器中定义的类型属性。在使用STL中表明容器长度的时候,我们一般用size_type
  • 所属的命名空间不同
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值