一、处理类型的目的
随着程序越来越复杂,程序中用到的类型也越来越复杂。良好的处理类型方法有助于程序员清楚地知道使用该类型的真实目的以及灵活简单地表达使用类型。
二、处理类型方法
(一)类型别名
类型别名是一个名字,它是某种类型的同义词。使用类型别名有很多好处,它让复杂的类型名字变得简单明了、易于理解和使用,还有助于程序员清楚地知道使用该类型的真实目的。
有两种方法可用于定义类型别名,传统方法是使用关键字typedef,新方法是使用别名声明。定义类型别名的示例如下:
typedef double wages; //wages是double的同义词(传统方法)
using wages = double;//wages是double的同义词(新标准方法)
注意事项(p60):
1. 如果某个类型别名指代的是复合类型或常量,那么在使用类型别名的声明语句中就需要注意确认真正的声明符。
(二)auto类型说明符
编程时常常需要把表达式(包含变量、函数调用、算术表达式、关系表达式、逻辑表达式、赋值表达式、条件表达式等)的值赋给变量,这就要求在声明变量的时候清楚地知道表达式的类型。C++11新标准引入了auto类型说明符,用它就能让编译器替我们去分析表达式所属的类型。auto定义的变量必须有初始值,其让编译器通过初始值来推算变量的类型,但是编译器推断出来的auto类型有时候和初始值的类型并不完全一样,编译器会适当地改变结果类型使其更符合初始化规则。
使用说明(p61):
1. 当引用被用作初始值时,编译器以引用对象的类型作为auto的类型;
2. auto一般会忽略顶层const,同时底层const则会保留下来。如果希望推断出的auto类型是一个顶层const则需要明确指出const auto;
3. 引用的类型也可以被设为auto。
(三)decltype类型指示符
对于从表达式(包含变量、函数调用、算术表达式、关系表达式、逻辑表达式、赋值表达式、条件表达式等)的类型推断出要定义的变量的类型,但是不想用该表达式的值初始化变量的情况,C++11新标准引入了decltype类型说明符,它的作用是选择并返回操作数的数据类型(编译器分析表达式并得到它的类型,却不实际计算表达式的值)。
使用说明(p63):
1. 如果decltype使用的表达式是一个变量,则decltype返回该变量的类型(包括顶层const和引用);如果给变量加上了一层或多层括号,这样的decltype就会得到引用类型;
2. 如果decltype使用的表达式不是一个变量,则decltype返回表达式结果对应的类型;
3. 如果decltype使用表达式的内容是解引用操作,则decltype将得到引用类型。
(四)自定义数据结构
从最基本的层面理解,数据结构是把一组相关的数据元素组织起来然后使用它们的策略和方法。自定义数据结构的方式有设计创建结构体、联合体或类等。
参考资料:
[1] C++ Primer中文版:第5版 /(美)李普曼(Lippman,S.B.),(美)拉乔伊(Lajoie,J.),(美)默(Moo,B.E.)著;王刚,杨巨峰译. —北京:电子工业出版社,2013.9.