基本数据类型
除开void类型之外,就是算术类型。而算术类型又可以分为整型和浮点型:
C++标准并没有规定基本数据类型的长度,但是规定了基本数据的最小长度,以及它们之间的大小关系。比如short最小长度为16位bit,int的长度不小于short,而long又不小于int等等。
类型 | 含义 | 最小长度 | 备注 |
---|---|---|---|
bool | 布尔值 | NA | |
char | 字符型 | 8 bits | 大小为一个字节 |
wchar_t | 宽字符型 | 16 bits | |
char16_t | unicode字符型 | 16 bits | 大小固定 |
char32_t | unicode字符型 | 32 bits | 大小固定 |
short | 短整型 | 16 bits | |
int | 整型 | 16 bits | |
long | 长整型 | 32 bits | |
long long | 超长整型 | 64 bits | C++11标准引入 |
float | 单精度浮点型 | 6位有效数字 | |
double | 双精度浮点型 | 10位有效数字 | |
long double | 扩展精度浮点型 | 10位有效数字 |
为什么C++不规定基本类型定长呢?
比如java中每一种类型都有自己固定的长度,做到在所有平台运行都是一致的。但我认为C++的做法反而是更合理的,因为C++将决定基本数据类型长度的权力交给了编译器实现,这样编译器就能根据具体的硬件平台来选择处理效率最高的方案。
比如对于整型和浮点型,int和double类型的长度在各个平台处理起来往往都是最高效的,不仅在C++程序员编写程序的时候经常用到,C++的语法也经常会用到,例如数字字面值默认为int和double类型,二元运算默认提升为int和double类型,就连不定参数的传入也会默认提升为int和double类型。这样只需要写一次代码就能得到各个平台效率最高的程序。
至于代码可移植性问题,首先C++规定的基本类型最小长度足够应付很多场景,其余确实需要定长类型的情况也可以利用<cstdint>头文件引入的int8_t,int16_t,int32_t等定长类型来解决。
网友评论