处理类型

来源:互联网 发布:java 日志级别 trace 编辑:程序博客网 时间:2024/05/17 08:15

1.类型别名

a.传统方法:关键字typedef
typedef int newType;  //newType 是int的同义词typedef newType *p;//p是int*的同义词

b.新方法:别名声明(alias declaration),使用 using
using newType=int;//newType是int的同义词

当某个类型别名指代的是复合类型或常量,不能把它带入声明语句中。
typedef char *pstring;const pstring cstr=0;//cstr是指向char的常量指针  同等于char * const cstr =0; cosnt pstring *ps;//ps是一个指向char的常量指针的指针
pstring 实际上是指向char的指针,所以const pstring 是指向char的常量指针。

2.auto类型说明符

auto是C++11新引入的类型说明符,用它能让编译器替我们去分析表达式所属的类型。
auto让编译器通过初始值来推断变量的类型。(初始值是引用对象时,初始类型判断为所引用的对象的类型)
auto 声明语句中的所有变量的初始基本数据类型必须一致。
auto 一般忽略掉顶层const,保留底层cosnt。
const int a=0;auto b=a,&c=a;//b是int,c是int类型a的引用 (a的顶层const 被忽略掉了)auto d=&a;//d是指向整数常量的指针(对常量对象取地址是一种底层const)

3.decltype类型指示符

C++引入说明符decltype,用来从表达式中的类型推断出要定义的变量类型,并且不需要用该表达式的值初始化变量(不然可以用auto)。
decltype(f()) a;//用f()返回值类型定义adecltype(a) b;//用a对应的类型定义b
decltype推断方式:
a.表达式时一个变量时,decltype返回该变量的类型(包括顶层const和引用)。
decltype(f()) a;//用f()返回值类型定义adecltype(a) b;//用a对应的类型定义b

注意:decltype((variable))(双层括号)的结果永远是引用。

b.表达式不是一个变量时,decltype返回表达式结果对应的类型。
若表达式求值结果是左值时,返回值对应的类型的引用类型。若表达式求值结果是右值,返回值对应的类型。
(左右值简单归纳:当一个对象被用作右值得时候,用的是对象的值(内容);当对象被用作左值的时候,用的是对象的身份(在内存中的位置))
(一般来说,可以放在赋值操作符左边的是左值,可以放在右边的而是右值
(左值表示程序中必须有一个特定的名字引用到这个值。右值表示程序中没有一个特定的名字引用到这个值除了用地址。)
decltype(f()) a;//用f()返回值类型定义adecltype(a) b;//用a对应的类型定义b