C++里有哪几种数据类型?

1.基本类型

  布尔型,即bool,它的取值只能是true(真)或者false(假),分别代表非零与零。对布尔型的赋值可以直接用true或者false进行赋值,也可以用整型常量对其进行赋值,只不过整型常量赋值给布尔型变量会自动转换为true或者false。true就是(非零,在计算机中存储时以1存储),false就是(零,计算机内以0存储)。

char类型
    char是基本的字符类型,一个char的空间应确保可以存放(机器基本字符集中)任意字符对应的数字值。也即,一个char的大小和一个机器字节(8bit)一样。储存ASCII码
其他字符类型
    作用:用于扩展字符集。
    wchar_t类型:用于确保可以存放机器最大扩展字符集中的任意一个字符。用于存储其他语言中的字符。
    char16_t/char32_t类型:为Unicode字符集服务。
    Unicode:是用于表示所有自然语言中字符的标准。

数据类型

定义标识符

占字节数

数值范围

短整形

short int

2

-216~~215-1

整形

int

4

-232~~231-1

长整形

long int

4

-232~~231-1

超长整形

long long int

8

-264~~263-1

无符号整形

unsigned

2

0~~216-1

无符号短整形

unsigned short

2

0~~216-1

无符号长整形

unsigned long

4

0~~232-1

无符号超长整形

unsigned long long

8

0~~264-1

   float 数据类型被认为是单精度。double 数据类型通常是 float 的两倍大小,因此被认为是双精度。顾名思义,long double 数据类型又比 double 要大。这些数据类型的确切大小取决于当前使用的计算机。唯一可以保证的是:
  double 至少与 float 一样大。
  long double 至少与 double一样大。

  在C++标准库里,通过类string从新自定义了字符串。
  头文件: #include
  string直接支持字符串连接
  string直接支持字符串的大小比较
  string直接支持子串查找和提取
  string直接支持字符串的插入和替换
  string同时具备字符串数组的灵活性,可以通过[ ]重载操作符来访问每个字符。

2.构造类型

  一个数组就像一个变量,但是它可以存储一组值,所有值均具有相同的数据类型。这些值一起存储在连续的内存位置。数组的大小声明符必须是一个常量整数表达式,其值大于零。它可以是一个常数,也可以是一个命名常量。

int SIZE=5;
int array[SIZE];
float arrayf[10]//10个float值的数组
char arrayc[20]//20个char值的数组
string arrays[5]//5个string对象的数组

  结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型,它的特点和数组主要有两点不同,首先结构体可以在一个结构中声明不同的数据类型。第二,相同结构的结构体变量是可以相互赋值的,而数组是做不到的,因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是),数组名称是常量指针,所以不可以做为左值进行运算,所以数组之间就不能通过数组名称相互复制了,即使数据类型和数组大小完全相同。结构体可以描述数组不能够清晰描述的结构,这是数组所不具备的。
  定义结构体使用struct修饰符

  共用体类型也是用来描述类型不相同的数据,但与结构体类型不同,共用体数据成员存储时采用覆盖技术,共享(部分)存储空间。在结构体中增加共用体类型成员,可使结构体中产生动态成员,相当于PASCAl,语言的变体记录。
  共用体类型定义用关键字union标识

  类代表了某一批对象的共性和特征。类是对象的抽象,对象是类的具体实例。和结构体类型和结构体变量一样,c++中也是先声明一个类类型,然后用它去定义若干个同类型的对象。对象就是类类型的一个变量。

class Student //声明了一个名为student的类类型
{
	private:
	int num;
	public:
	void display();
};
Student stud1,stud2; //定义了两个Student类的对象

  事实上,类也是一种数据类型,它是一种广义的数据类型,过去接触的都是狭义的数据类型,如结构体类型的成员都是数据,而类这种数据类型的数据既包含数据也包含操作数据的函数。

  如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型。所谓“枚举”是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。
  声明枚举类型用enum开头。
  l例如

enum weekday{sun,mon,tue,wed,thu,fri,sat};

  上面声明了一个枚举类型weekday,花括号中sun,mon,…,sat等称为枚举元素或枚举常量。
表示这个类型的变量的值只能是以上7个值之一。它们是用户自己定义的标识符。

3.指针类型

  指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。

4.引用类型

  “引用”是c++的一种新的变量类型,是对C的一个重要补充。它的作用是为变量起一个别名。假如有一个变量a,想给它起一个别名。

int a;int &b=a;

  这就表明了b是a的“引用”,即a的别名。经过这样的声明,使用a或b的作用相同,都代表同一变量。在上述引用中,&是“引用声明符”,并不代表地址。不要理解为“把a的值赋给b的地址”。引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址。声明引用并不开辟内存单元,b和a都代表同一变量单元。
注意:在声明引用变量类型时,必须同时使之初始化,即声明它代表哪一变量。在声明一个变量的引用之后,在本函数执行期间,该引用一直与其代表的变量相联系
  引用的规则
  (1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。
  (2)不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)。
  (3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。
  引用的主要功能:
  传递函数的参数和返回值。

  C++语言中,函数的参数和返回值的传递方式有三种:值传递、指针传递和引用传递。

5.空类型

  对于空类,编译器不会生成任何的成员函数,只会生成1个字节的占位符。