【C++】深入剖析C++11 initializer_list &&新的类功能 &&可变模板参数

目录

一、std::initializer_list

1、std::initializer_list是什么类型 

2、std::initializer_list 的应用场景

①给自定义容器赋值

② 传递同类型的数据集合

二、新的类功能

1、默认成员函数

2、关键字default

3、关键字delete

三、可变参数模板


一、std::initializer_list

  • initializer_list是一种标准库类型,用于表示某种特定类型的值的数组。和vector一样,initializer_list也是一种模板类型,定义 initializer_list 对象时,必须说明列表中所含元素的类型。和vector不一样的是,initializer_list 对象中的元素永远是常量值,我们无法改变 initializer_list 对象中元素的值。
  •  initializer_list 可以作用于可变数量的实参,有时我们无法提前预知应该向函数传递几个实参。为了编写能处理不同数量实参的函数,C++11新标准提供了两种主要的方法:①如果所有的实参类型相同,可以传递一个名为 initializer_list 的标准库类型;②如果实参的类型不同,我们可以编写一种特殊的函数,也就是所谓的可变参数模板。
  •  作用于 initializer_list 对象的begin和end操作类似于vector对应的成员。begin()成员提供一个指向列表首元素的指针,end()成员提供一个指向列表尾元素的指针。
  •  含有 initializer_list 形参的函数也可以同时拥有其他形参。
  •  类模板 initializer_list 用于访问初始化列表(initialization list),列表元素的数据类型为const T.编译器从花括号(brace)封闭的、元素由逗号分隔开的初始化列表自动构造initializer_list模板类,例如:
  • auto il = {10,20, 30}; // the type of il is an initializer_list<int>
  • initializer_list 官方文档

1、std::initializer_list是什么类型 

 2、std::initializer_list 的应用场景

这里 arr 没有显式指定长度,因此,它的初始化列表可以是任意长度。

同样, std::map、 std::set、 std::vector 也可以在初始化时任意书写需要初始化的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值