2.5处理类型

2.5.1 类型别名

 类型别名(type alias)是一个名字,它是某种类型的同义词。

使用类型别名有很多好处,他让复杂的名字简单明了易于理解

 

有两种方法定义类型别名

传统方法使用 typedef

 

 typedef double wages ; //wages 是double的同义词

 typedef wages base, *p;  //base是double的同义词,p是 double*的同义词

 

新标准规定新方法, 别名声明(alias declaration using

 

 using SI = Sales_item; //SI是Sales_item的同义词

 

指针,常量和类型别名

 typedef char *pstring;

 const char *cstr; //是对 const pstring cstr 的错误理解

 

 pstring 基本数据类型是指针, char*重写后数据类型就变成了char,*成为了声明符的一部分。

 

 char的常量指针,后者声明了一个指向const char的指针

 

 

2.5.2 auto类型说明符

  auto让编译器通过初始值来推算变量的类型。auto定义的变量必须有初始值

 

  可以在一条语句中声明多个变量,因为只能有一个数据类型,所有变量初始变量都应该相等

 

 auto sz=0,pi=3.14 ;

//错误:sz和pi的类型不一样

 

复合类型,常量和auto;

auto一般会忽略掉顶层const,同时底层const会保留下来

设置一个类型为auto的引用时,初始值中的顶层常量属性依然保留,给初始值绑定一个引用,则此时初始值必须是同一种类型

2.5.3 decltype类型指示符

 decltype 作用是选择并返回操作数的数据类型。过程中,编译器分析表达式并得到它的类型,却不计算表达式的值。

 

 decltype*(f()) sum = x;//sum的类型就是函数f的返回类型

 

如果decltype使用的表达式是一个变量,则decltype返回该变量的类型(包括顶层const和引用)--和auto不同

 

decltype和引用

 

如果r是一个引用,decltype(r)的结果还是一个引用类型,如果想让结果类型是r所指的类型,可以把r作为表达式的一部分,如(r+0),结果是一个具体值而非引用

 

int i=42,*p= &i;

decltype(*p)c;//错误:c是int&,必须初始化

表达内容是解引用操作,则decltype将得到引用类型

 

//decltype的表达式如果式加上了括号的变量,结果将会是引用

 

decltype((i))d;//错误:d是int&,必须初始化

 

Warning decltype((variable)) 的结果永远是引用,而decltype(variable)结果只有当 variable是一个引用的时候才是引用

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值