一般的数据类型我们都很熟悉,也符合我们数学上的习惯,比如int,double,float,等之类的,虽然自己对这方面是比较熟悉的了,但还是耐着性子把第三章的dealing with data 看完了,果然自己还是有所收获的。
所以我就列一些不正常见的数据类型
1.union类型
则还是C++里的共用体,和struct还是有点像的,看看它的定义
union one4all
{int a;
float b;
double c;
}
其中one4all 一个变量就能存储3中不同类型的数据,但是最大的和struct的不同就是它的要求是这几种类型必须是同一种家族的数据,比如例子中就是全部都是整型类型的数据。
而且union这种类型的数据在内存上还是有点特别的,在C++中struct的大小是包含的每个基本数据的总和的大小,但是union确实根据内存占用最大的那个数据为它的大小(例子就是double类型的大小,一般是8个字节),存储其他类型数据的时候,它始终是在这个内存上重新写入的,这也就是为什么union数据一次只能表示一种数据。union适合于非常省内存的场所,不过对于现在电脑越来越大的内存来说,这种数据形式是逐渐淘汰的。
2.array 模板类型
C++中array类和vector的区别:vector是可以随机访问的,存储空间并不是连续的,但是array是连续的存储空间,相比于c-style string,array支持通过字符串名直接赋值
#include<iostream>
#include<array>
#include<vector>
using namespace std;
int main()
{
array<int> arr{1,2,3,4};
array<int> arr1;
arr1 = arr;
char arr2[20];
char arr3[20] = "helloworld";
//arr2 = arr3;不正确的
}
3.enumeration类型
enum e = {red=2,blue=3,purple=5,green=7};
int color = blue;//枚举类型能够自动转换为整型
// e color = 4;not valid, compiler can't do that autoatically
e color = e(4);//this is Ok using a type cast
//++blue;not valid
枚举枚举类型只定义了赋值号,没有定义其他的运算符,所以++操作是不合法的。