美文网首页
C++11中的初始化列表

C++11中的初始化列表

作者: georgeguo | 来源:发表于2018-04-22 00:07 被阅读38次

1 初始化列表

C++98/03中可以使用初始化列表对普通数组、POD类型等进行初始化。如:


image.png

但是这种初始化方式的适用性比较窄,C++11大大的增加了初始化列表的适用性,可以用于任何乐行对象的初始化。


image.png

初始化时,{}前面的等号是否书写,对初始化行为没有任何影响。

2 初始化列表使用细节

image.png

上述第二种初始化是无效的,若存在以情况之一的初始化列表将不生效:

  • 类中含有用户自定义的构造函数;
  • 类中含有private或protected的非静态成员数据;
  • 类有基类;
  • 类中有虚函数;
  • 类中有{}或者=直接初始化的非静态成员数据;

例1:含有用户自定义的构造函数

image.png

例2:类中含有private或protected的非静态成员数据;

image.png

而包含有静态成员时,可以正常初始化


image.png

例3:有基类或有虚函数

image.png

例4:类中包含{}或者=直接初始化的情况

image.png

那如何对存在上述5中情况的类使用初始化列表呢?自定义构造函数,如:

image.png

3 std::initializer_list 实现任意长度的初始化列表

image.png

上述stl的容器可以在初始化时书写任意长度的内容,因为stl的容器通过使用轻量级的类模板std::initializer_list ,实现了接收任意长度的内容。
因此,可以通过定义一个参数为std::initializer_list 的构造函数,使用户自定义的类也能够接收任意长度的内容,如:


image.png

相关文章

  • c++11新特性之列表初始化

    C++11新增了列表初始化的概念。 在C++11中可以直接在变量名后面加上初始化列表来进行对象的初始化。 列表初始...

  • c++11强化知识点

    初始化列表(std::initializer_list) c++11提供了std::initializer_lis...

  • [C++11阅读][2-3-2]列表初始化与防止类型收窄

    列表初始化 用大括号{}对变量和数组进行初始化,在C++98中有所限制,C++11解除了限制。 用initiali...

  • 列表初始化

    C++11新标准中,使用花括号来初始化变量得到全面应用。 当内置类型的变量使用列表初始化时,有一个明显的好处:如果...

  • 列表初始化

    c++11通过了列表初始化的方式。能通过列表初始化的方式去初始化一些自定义的类型。赋值可以采用如下形式:int a...

  • 深入理解C++11 3.5 列表初始化

    3.5.1 初始化列表 C++98中,可以使用"{}"对数组元素进行统一的集合初始值设定,如 而在C++11中可以...

  • C++11中的初始化列表

    1 初始化列表 C++98/03中可以使用初始化列表对普通数组、POD类型等进行初始化。如: 但是这种初始化方式的...

  • 006 类内初始值

    C++11 的类内初始化允许非 static 成员的初始化,可以用{}或=号。构造函数的初始化列表 与 类内成员初...

  • c++11 通用初始化方式

    C++11将使用大括号的初始化(列表初始化)作为一种通用初始化方式,可用于所有类型。 数组初始化 数组以前就可使用...

  • c++11特性

    c++11特性 本次笔记记录一些常用的c++11特性,以方便查看。 1. 方便的列表快速初始化 2. 方便的aut...

网友评论

      本文标题:C++11中的初始化列表

      本文链接:https://www.haomeiwen.com/subject/pmfqlftx.html