类型别名
1、关键字typedef:
typedef double wages; //wages是double的同义词
typedef wages base, *p; //base是double的同义词, p是double *的同义词
2、新标准方法,别名声明(alias declaration):
using UI = usigned int; //UI是usigned int的同义词
指针、常量和类型别名
typedef char *pstring;
const pstring cstr = 0; //cstr是指向char的常量指针
const pstring *ps; //ps是一个指针,它的对象是指向char的常量指针
注意:
1、尝试把类型别名替换成它本来的样子以理解语句的含义,是错误的理解方式;
2、const是对给定类型的修饰。
auto类型说明符(C++11)
1、auto是让编译器通过初始值来推算变量的类型,所以auto定义的变量必须有初始值。
2、auto在一条语句中声明多个变量时,该语句中所有变量的初始基本数据类型都必须一样。
auto i = 0, *p = &i; //正确:i是整数、p是整型指针
auto sz = 0, pi = 3.14; //sz和pi的类型不一致
3、auto类型有时候和初始值的类型并不完全一样:
(1)当引用被用作初始值时,真正参与初始化的其实是引用对象的值,所以编译器以引用对象的类型作为auto的类型。
(2)auto一般会忽略掉顶层const,同事底层const则会保留下来:
const int ci = i;
auto b = ci; //b是一个整数(顶层const被忽略)
auto c = &ci; //c是一个指向整数常量的指针(对常量对象取地址是一种底层const)
decltype类型指示符
decltype的作用是选择并返回操作数的数据类型。
decltype(f()) sum = x; //sum的类型就是函数f的返回类型,但编译器并不实际调用函数f
注意:decltype((variable))(注意是双层括号)的结果永远是引用,而decltype(variable)结果只有当variable结果只有当variable本身就是一个引用时才时引用。
struct
类定义的最后必须加上分号,表示声明符的结束;