关于auto和decltype

 auto

auto让编译器通过初始值来推算变量的类型--------因此,auto定义的变量必须有初始值.

1.让引用对象作为初始值


--------------------------------------使用引用其实是使用引用的对象

                 
                   int i=0,&c=i;

                   auto a=c;//a是int型变量

2.auto与引用


------------------------------------一般来说,auto会忽略顶层const.

                   const int i=0,&j=i;

                   auto a=i;       //a是一个int(而非const)

                   auto b=j;      //b是一个 int (非const)   等同于auto b=i;

                   auto p=&i;    //p是一个指向常量的指针(const int*),底层const



因此,当我们希望推断出来的auto是顶层const时,需要明确指出

const auto c=i;

------------------------------------将引用的类型设置为auto,顶层const属性仍将保留

                  const int i=0;

                   auto &c=i;    //c为const int

------------------------------------要在同一条语句中定义多个auto变量时,初始值必须是同一类型

                  
                  (符号*和&只从属于某个声明符,而非基本数据的一部分)

                     const int c=0;

                   auto &cr=c,*p=&c;   //错误,这里cr为 const int , p对应的auto为 int



decltype

 有的时候我们想用一个表达式的值推算出要定义变量的类型,但是又不想用该表达式的值初始化变量,这个时候可以选择decltype.它的作用是返回一个表达式的数据类型。

------------------------------------与引用不同的是,它准确的返回顶层const和引用



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值