C++ Primer 学习___auto关键字

auto关键字理解

总结来说是auto在与const、引用、指针结合使用时的理解。

如同C#的var自动类型判断,C++auto关键字会在编译时对变量的类型进行判断。

  1. 为何使用auto关键字:
    编程时常常会把表达式的值赋给变量,然而有时我们无法清楚地知晓表达式的类型,所以引入了auto说明符来让编译器去分析表达式所属的类型。因为auto让编译器通过初始值来推算变量类型,所以auto定义的变量必须有初始值。最简的:
    auto item = val1 + val2;//编译器会根据val1和val2相加的结果来决定item的类型

  2. 复合、常量和auto:
    auto类型以引用作为初始值时,真正参与初始化的其实是引用对象的值,如:

int i = 0,&r = i;
auto a = r;//a是一个整数(r 是 i的别名,而i是一个整数)

其次,auto一般会忽略掉顶层const,同时顶层const则会保留下来,比如当初始值是一个指向常量的指针时:

const int ci = i,&cr = ci;
auto b = ci;//b是一个整数(ci的顶层const被忽略掉了)
auto c = cr;//c是一个整数(cr是ci的别名,ci本身是一个顶层const)
auto d = &i;//d是一个整型指针
auto e = &ci;//e是一个指向整数常量的指针(对常量对象取址是一种底层const)

如果希望auto类型是一个顶层const,则需要明确指出,如:

const auto f = ci;//ci 被编译器推演为int,f为const int

还可以将引用的类型设为auto,此时原来的初始化规则仍然适用:

auto &g = ci;//g是一个整型常量引用,绑定到ci(此句说明初始值作为auto的引用时,顶层常量属性仍然保留,引用完成之后,保留下来的const就成为了引用的const,此时变为底层常量)
auto &h = 42;//错误:不能为非常量引用绑定字面值
const auto &j = 42;//正确:可以为常量引用绑定字面值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值