C++11新特性-----变长的对象初始化列表

C++11 提供了 initializer_list 来接受变⻓的对象初始化列表:
class A{
public:
 A(std::initializer_list<int> list);
};
A a = {1, 2, 3};
注意 初始化列表 特性只是现有语法增强,并不是提供了动态的可变参数。该列表只能静态地构造
c++11标准中,initializer_list对于标准库的编写影响非常大,说一个简单的例子,在c++11之前,max函数的源程序是这样的:
template <class T> const T& max (const T& a, const T& b);
template <class T, class Compare>
  const T& max (const T& a, const T& b, Compare comp);  //支持自己编写的比较函数

也就是max函数只能比较两者之间的大小,但是有了initializer_list后,c++11标准库中添加另外一种实现方式:

template <class T> T max (initializer_list<T> il);
template <class T, class Compare>
  T max (initializer_list<T> il, Compare comp);

这就说明,c++11之后,max函数可以传递更多的参数,栗子:

cout << max({ 54,16,48,5 }) << endl;   //输出54

c++11中统一了初始化列表(Uniform Initiaization),即均可以使用{}来对对象进行初始化。例如:

int value[]{1,2,3};
vector<int> v{2,3,4,5,6,7};
vector<string> cities{"Beijing","Dezhou"};
int i;         //i has undefined value
int j{};       //j is initialized by 0
int *p;        //p has undfined value
int *q{};      //q is initialized by nullptr

综上,上面的初始化列表背后就是使用initializer_list来进行实现的,比如vector和map的构造函数中新增了这样一种新的构造函数:

vector (initializer_list<value_type> il,
       const allocator_type& alloc = allocator_type());   //vector使用initializer_list进行初始化
map (initializer_list<value_type> il,
     const key_compare& comp = key_compare(),
     const allocator_type& alloc = allocator_type());  //map使用initializer_list进行初始化

这样才支持使用初始化列表来对其进行初始化

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是纠结伦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值