类型别名
定义类型别名有两只方法,分别是:
- 使用关键字:typedef (传统方法)
- 使用关键字:using (新标准)
typedef char* pstring;
const pstring cstr = 0; // cstr 是指向char的常量指针(**const被识别为顶层const**)
using int32_t = int
auto类型说明符
c++ 11 新标准引入了auto类型说明符, 用它就能让编译器替我们分析表达式所属的类型。另外,因为一条声明语句只能有一个基本类型,所以该语句的所有变量的初始基本类型都必须一样。
auto i =0, *p = &i;
auto i = 0, j = 3.14; // 错误,i和j的类型不一致。
decltype
c++ 11 引入了decltype, 它的作用是选择并返回操作数的数据类型。 decltype 使用 表达式是一个变量时,会返回该变量的类型(包括顶层const和引用)
const int ci = 0;
decltype(ci) x = 0; // x的类型是const int
int i = 1, *p = &i;
decltype(*p) c; // 错误,c是int&, 必须初始化
另外, 我们知道 解引用指针 可以得到指针所指的对象, 而且还能给这个对象赋值, 所以 decltype(*p) 的结果是int& 而非 int.
decltype((i)) d; // 错误,d 是int&, 必须初始化
decltype(i) e; // 正确,e 为int
如果给变量加上了一层或多层括号, 编译器就会把它当成表达式。 变量是一种可以作为赋值语句左值的特殊表达式, 所以decltype 会得到引用类型。