类型别名
两种方法:1
2
3
4
5//第一种、
typedef double money; //money 是double 的同义词
typedef money rmb , *dollar // rmb是 double的同义词,dollar是double * 的同义词
using money = double; //money 是double 的同义词
注意事项
如果类型别名指代的是复合类型,那么把它用到声明语句中会有变化1
2typedef char *ch; //ch是 char *的同义词
const ch c = 0; // 注意:这里c是 指向char的常量指针 而非 指向常量char 的指针
注意这里和平常的理解不一样:我刚开始以为const ch 就是 const char ,没想到对const ch 的理解并不是简单地把 ch 替换成 char 。
decltype 类型提示符
有时我们想通过表达式的类型来判断要定义的变量的类型,但是又不想用该表达式的值来初始化变量,就可以用decltype。1
2
3
4
5
6
7
8int f(int a , int b){
return a+b;
}
decltype(f(10 , 10)) sum = 10; // sum 为int 类型
int i = 10 , *p = &i;
decltype(*p) c = 10; // 注意:如果表达式的结果是解应用操作,那么将返回 引用类型,所以 c的类型是 int & ,而非 int,所以c必须被初始化。
decltype((i)) d = 10; //注意:decltype((variable))的结果是 引用,所以d的类型是int &,所以 d 必须初始化。
