Fork me on GitHub

类型处理

类型别名

两种方法:

1
2
3
4
5
//第一种、
typedef double money; //money 是double 的同义词
typedef money rmb , *dollar // rmb是 double的同义词,dollar是double * 的同义词

using money = double; //money 是double 的同义词

注意事项

如果类型别名指代的是复合类型,那么把它用到声明语句中会有变化

1
2
typedef 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
8
int 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 必须初始化。