typedef 、auto、 decltype用法

1.typedef的作用:随着程序越来越复杂,程序中的变量越来越复杂,typedef可以提高可读性

typedef double wages;
typedef wages base,*p;//base是double的同义词,p是double*的同义词
using SI=Sales_item;//c++11,别名声明 Sales_item是自定义类
wages hourly,weekly;
SI item;//等价于Sales_item item

对于指针这样的复合类型,类型别名可能会产生意想不到的结果
 

typedef char *pstring;
const pstring cstr=0;//指向char的常量指针 此处不同于const char *pstring 将pstring视为一个整体
const pstring *ps;//ps是指针变量 它的对象是指向char的常量指针

2.auto类型说明符:c++11,让编译器通过初始值推断变量的类型

当左边不是指针和引用时可以忽略右边顶层的const底层的const是指向对象

当时指针和引用时不可以忽略

int i=0,&r=i;
const int ci=i,&cr=ci;
auto &g=ci;//底层const没有忽略
auto b=ci;//顶层const被忽略
auto &h=33;//错误 不能为非常量引用绑定字面值
const auto &j=33;//正确
auto &n=i,*p=&ci;//错误 左边类型为int 右边类型为const int左右类型不一样

3.decltype类型说明符:选择并返回操作数得的类型

const int ci=0,&cj=ci;
decltype(ci)x=0;//x类型是const int
decltype(cj)y=x;//y类型是const int& 引用必须初始化
//引用一般都是作为其对象的同义词出现,decltype是个例外
int i=42,*p=&i,&r=i;
decltype(r+0)b;//正确 b为int型
decltype(*p)c;//错误 如果表达式的内容是解引用操作,则decltype将得引用类型需要初始化
decltype((i))d;错误 d是yin&类型,必须初始化 decltype((variable))的结果是引用

上一篇:js常用方法和一些封装(2) -- 随机数生成


下一篇:C++11 auto 与 decltype 关键字