C++学习笔记----auto、decltype

本文探讨了C++中auto关键字的类型推断特性,以及decltype用于分析变量类型的方法。重点介绍了如何在声明和使用变量时利用auto简化类型定义,以及decltype在类型确定和表达式分析中的作用。
摘要由CSDN通过智能技术生成

1.auto

使用auto关键字来修饰变量时我们无需指出变量的实际类型,变量的实际类型将会由编译器自己推断。

auto a=5;//a为整型
auto b=0.5;//b为浮点型

使用auto在同一条语句中声名多个变量时,每个变量的类型必须相同。

auto i=0,*p=&i;//正确,i和p都是整型
auto i=0;b=0.5;//错误,i和b的类型不同,不能在同一条语句中

符合类型、常量和auto
当auto和引用相结合使用的时候,将会把引用的对象的类型认为是变量的类型。

int i=0,&r=i;
auto a=r;

上述的变量a的类型为int。

当变量和const结合使用时,auto一般会忽略顶层const,将底层const作为其类型。

int i=0;
const int ci=i,&cr=ci;
auto b=ci;//b是一个整型,顶层const属性将会被忽略的
auto c=cr;//c是一个整型
auto  d=&i;//d是一个整型指针。
auto e=&ci;//e是一个指向常量的指针,因为ci本身为常量。

2.decltype

decltype可以分析变量、表达式、或者函数的返回值的类型,它仅仅分析变量的数据类型但是并不会真正的计算出表达式。

int ci=0,&cj=ci;
decltype(ci) x=0;//x的类型是const int
decltype(ci) y=x;//y是const int &,y是绑定到x的引用
decltype(cj) z; //错误,z是一个引用,必须初始化
---------------------------------------------------
int i=3,*p=&i,&r=i;
decltype(r+0) b;//正确,r+0的值为具体的int的值,所以b是未初始化的int变量
decltype(i)e;//正确:e是未初始化的int
decltype(*p) c;//错误,解引用c的类型为int &,必须初始化;
decltype((i)) a;//错误,a的类型为引用

decltype((var))(两层括号)的值永远是引用,decltype(var)(单层引用)仅当var为引用时推断出来的才是引用。

  • 对于引用而言auto推断出引用的类型,而decltype本身就是引用
  • 对解引用操作,auto推断出原有类型,decltype推断出引用
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值