C++处理类型

编程时常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚地知道表达式的类型。然而要做到这一点并非那么容易,有时甚至做不到。其实有两个C++类型说明符可以帮助解决该问题:auto和decltype。
auto可以让编译器通过初始值来推断出变量的类型,所以使用auto声明的变量就必须要初始化。话不多说,上代码:

int i = 10;
int &r = i;
cout<<i<<'\t'<<r<<endl;
auto t = r;
t=20;
cout<<i<<'\t'<<r<<'\t'<<t<<endl;
auto &temp = t;
cout<<"&r="<<&r<<'\t'<<"&t="<<&t<<'\t'<<"&temp="<<&temp<<endl;

这里写图片描述
首先定义一个int型变量i,初始化值为10,然后定义了i的引用r。看看i和r的输出,没问题,都是10.
接着使用auto定义了t这个变量,初始化为r。我们知道r是一个引用,那看看t是个什么类型的变量。其实auto t = r;这行代码能够通过编译就可以知道,t肯定不是一个引用,因为本身r是一个引用,不可能定义一个引用的引用,那t肯定是和i同一类型。不过为了验证一下,我们让给t重新赋值,然后输出i,r,t,发现i和r值没有变化,只有t变了,说明推断是正确的。不过按照auto的使用方法来说,t应该和r是同一类型。但是,这里需要注意的是:使用引用其实是使用引用的对象,特别是当引用被用作初始值时,真正参与初始化的其实是引用对象的值。此时编译器就以引用对象的类型作为auto的类型。
我们继续往下走,auto t = r; 这个语句定义了一个t类型的引用,也就是int型的引用temp,然后我们输出r,t,temp的地址来观察,到底这三个是个什么样的关系:可以发现,t和temp是一样的地址,也就是temp是t的引用,而和r已经没有了任何关联。
使用auto时需要注意的除了引用这,还有顶层const和底层const的问题:一般auto会忽略掉顶层const,而保留底层const。所谓顶层const,就是经const修饰后变量保持不变的,而底层const,一般是修饰指针对象,经修饰之后该指针必须指向对应类型的常量,即指向常量的指针。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值