2-5 C++ 类型别名与自动类型
2.5.1 类型别名(Type Alias)
typedef
-
语法
typedef double wages; //wages 是 double的别名 typedef char * pstring; //ptring 是 char *的别名
-
注意点:const修饰符修饰指针本身
const pstring p = &c; //此处的const修饰指针,是一个"Top-Level const",即p不能改变指向的对象 const char *p; //此处的const修饰char,是一个”Low-Level const",无法通过p改变指向对象的值
using
-
语法
using wages = double; using ptring = char *;
-
注意点:同上
2.5.2 auto类型说明符
基本说明
auto a = 0;
-
auto
会给a
赋予右值的数据类型:可以理解为auto
被替换为了右值的类型 -
auto变量必须初始化
-
定义多变量时,各变量的定义(definition)中的基本类型(the base type)部分要一致
int a = 0; auto i = a, p = 3.14; //auto的类型不一致
注意点
-
顶层const被忽略,底层const会保留
-
变量定义的一般规则仍然生效
2.5.3 decltype类型说明符
基本说明
const int ci = 0, &cj = ci;
decltype(ci) x = 0; //x为const int
decltype(cj) y = x; //y为const int的引用
decltype(ci) z; //error:z未初始化!!
- decltype作用同auto
- decltype变量必须初始化
注意点
-
decltype会精确地反映右值的类型,无论是顶层const还是底层const都会保留
-
decltypde(引用)
时,返回的是引用的类型,而不是引用绑定的对象的类型 -
拓展