处理类型:类型别名、auto类型、decltype类型。
- 类型别名:
2种形式:
1)typedef
typedef double w;
这条语句不是声明变量,而是用w作为double的别名。
2)using
using SI = Sale_item;//SI是Sale_item的别名
指针、引用和别名
typedef char *pstring;//pstring是指向char的指针
const pstring cstr = 0;//cstr是指向char的常量指针
const pstring *ps;//ps是一个指针,指向“指向char的常量指针”
注:如上,当别名中有指针符号(解引用符*),表示该别名的基本类型是指针,而不能简单的用pstring去改写。
- auto类型说明符
让编译器通过初始值来推断变量的类型。
1)必须有初始值
2)该语句中所有变量的初始基本类型都必须一样
3)推断出的类型和初始值类型并不完全一样
3.1)当引用用作初始值时,以引用的对象的类型作为auto的类型
3.2)一般auto会忽略顶层const
3.3) 希望推断出的auto类型是一个顶层const,需明确指出
3.4)当设定引用的类型是auto时,不再使用忽略
const int ci = i,&cr = ci;
auto b = ci;//b是int型,忽略顶层
auto c = cr;//c是int型,忽略
auto d = &i;//d是整形指针,整数地址即是指向整数的指针
auto e = &ci;//e是指向整数常量的指针,对常量对象取地址是底层
const auto f = ci;//f是const int
auto &g = ci;//g是整型常量引用
auto &h = 42;//错误,不能为非常量引用绑定字面值
const auto &j =42;//正确
auto k = ci,&l = i;//k为int,l为int型引用
auto &m =ci,*p = &ci;//m为对整型常量的引用,p是指向整形常量的指针
auto &n = i,*p = &ci;//错误,i是int,&ci为const int
注:&和*只从属于某个声明符,而不是基本数据类型的一部分。
- decltype类型指示符
作用:选择并返回操作数的数据类型
1)使用的表达式是一个变量,则decltype返回该变量的类型
2)使用的表达式不是变量,则返回表达式结果对应的类型
3)表达式得内容是解引用操作,则得到引用类型
4)表达式如果加上括号,结果是引用
decltype (f()) sum = x;//sum的类型是f()函数的返回类型
const int ci =0 ,&cj = ci;
decltype (ci) x = 0;//x的类型是const int
decltype (cj) y =x;//y的类型是const int&,y绑定到变量x
decltype (cj) z;//错误,z为引用,必须初始化
int i =42,*p = &i,&r = i;
decltype (r+0) b;//加法的结果是int,b为一个未初始化的int
decltype (*p) c;//错误,c是一个int&,必须初始化
decltype ((i)) d;//错误,d引用,未初始化
decltype (i) e;//正确,e未初始化的int
自定义数据结构:
类:以struct关键字开始
头文件:、
1)类通常定义在头文件中
2)头文件名与类名一样
3)头文件中也能使用其他的头文件
4)预处理器
#ifndef 头文件名(类名)注:一般大写
#define 头文件名
#endif
5)头文件不能包含using 声明