【C++进阶】C++11(上)列表初始化、变量类型推导和新增加容器(静态数组array、forward_list以及unordered系列)

统一的列表初始化

{}初始化

在C++98中,标准允许使用花括号{}对数组或者结构体元素进行统一的列表初始值设定。
在这里插入图片描述
在这里插入图片描述
C++11扩大了用大括号括起的列表(初始化列表)的使用范围,使其可用于所有的内置类型和用户自定义的类型,使用初始化列表时,可添加等号(=),也可不添加。
在这里插入图片描述
在这里插入图片描述
创建对象时也可以使用列表初始化方式调用构造函数初始化
在这里插入图片描述
在这里插入图片描述

std::initializer_list

经过上面的{}初始化列表的介绍,大家应该会有个疑问,那么这个{}整体是个什么类型呢?为什么会支持{}初始化?我们看一下下面的代码?
在这里插入图片描述
从上面我们可以知道,initializer_list是C++ STL库中的一个类。大家可以看标准库里面对initializer_list的介绍。
在这里插入图片描述
std::initializer_list使用场景:
std::initializer_list一般是作为构造函数的参数,C++11对STL中的不少容器就增加std::initializer_list作为参数的构造函数,这样初始化容器对象就更方便了。也可以作为operator=的参数,这样就可以用大括号赋值。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
STL库中还有许多容器支持{}初始化,这里就不一一列举,大家有兴趣可以自己去C++标准参考文档中去看。

变量的类型推导

auto

在C++98中auto是一个存储类型的说明符,表明变量是局部自动存储类型,但是局部域中定义局部的变量默认就是自动存储类型,所以auto就没什么价值了。C++11中废弃auto原来的用法,将其用于实现自动类型腿断。这样要求必须进行显示初始化,让编译器将定义对象的类型设置为初始化值的类型。
在这里插入图片描述
在这里插入图片描述

decltype

关键字decltype将变量的类型声明为表达式指定的类型。
在这里插入图片描述
在这里插入图片描述

新增加的容器

array

在这里插入图片描述
array是一个容器,可以开一个固定空间的数组。
在这里插入图片描述
它跟我们C语言学的开一个固定数组的空间并没有什么区别。
在这里插入图片描述
但是又因为C++兼容C语言,所以上面的那个语法就比较鸡肋,没有太大用处。
但是有一个好处就是,它对越界检查比较严格。
在这里插入图片描述

forward_list

在这里插入图片描述
forward_list是一个单链表,只支持从前往后遍历,不支持从后往前遍历。
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值