一、列表初始化

1)C++11以前,定义初始化的几种不同形式,如下:

  int data = 0;   //赋值初始化

  int data = {0};   //花括号初始化

  int data(0);  //构造初始化

2)C++11以旧语法中花括号初始化形式为基础,设计了列表初始化语法,统一了不同的初始化形式

  a)数据类型 变量{初始化列表}

  //聚合类型

  struct Persion

  {

    char name[64];

    struct Date//成员是聚合类型

    {

      int year;

      int month;

      int day;

    }Age;

  };

  //

  class Student

  {

  public:

    Student(int year,int month,int day) : _year(year),_month(month),_day(day) {}

    friend std::ostream& operator << (std::ostream &os, Student const & s)

    {

      os << s._year << "-" << s._month <<  "-" << s._day;

    }

  private:

    int _year;

    int _month;

    int _day;

  }

  int main()

  {

    int a{1};

    std::cout << a << std::endl;

    double b{1.1};

    std::cout << b << std::endl;

    //聚合类型(任意类型的数组)

    int c[]{1,2,3,4,5};

    copy(c,c + sizeof(c) / sizeof(c[0]),ostream_iterator<decltype(*c)>(cout, " "));

    std::cout << std::endl;

    //

    Persion persion{"张三",2019,11,14};

    std::cout << persion.name << persion.year << persion.day << std::endl;

    Student student{2019,11,14};

    std::cout << student << std::endl;

  }

  聚合类型

  1)任意类型的数组

  2)满足特定条件的类:

    a、无自定义的构造函数

    b、无私有或保护的非静态成员变量

    c、无基类

    d、无虚函数

    e、无通过“=”或者“{}”丰类声明部分被初始化的非静态成员变量

  3)聚合类型的元素或者成员可以是聚合类型也可以是非聚合类型

  4)对聚合类型使用列表初始化,相当于用列表初始化的值作为参数,调用相应的构造函数。

  b)变长初始化列表:initializer_list

  class Num

  {

  public:

    Num(std::initializer_list list)

    {

      for(auto i : list)

      {

        _vector.push_back(i);

      }

    }

    friend std::ostream& operator << (std::ostream &os, Num n)

    {

         //copy(n._vector.begin(),n._vector.end(),ostream_iterator<decltype(n._vector[0]>(os," ");

      for(auto i : n_vector)

      {

        os << i << " " ;

      }

      return os;

    }

  private:

    std::vector<int> _vector;

  }

  int main()

  {

    Num num{1,2,3,4,5,6,7};

    std::cout << num << std::endl;

  }

  initializer_list作为轻量级的列表容器,不但可以用在构造函数中,也可以作为普通函数的参数,传递不定数量的实参,

  相对于传统标准容器,效率更高(轻量级列表容器,仅保存初始化列表元素的引用,而非其副本)

最新文章

  1. css样式之border-radius
  2. selenium web driver 使用JS修改input属性
  3. STM32 DMA模块的配置与使用
  4. sqlhelper sqlparameter 实现增删改查
  5. IIS6.0启动网站ManagedPipelineHandler异常
  6. SQL Server:在事务中回滚TRUNCATE操作
  7. LotusPhp入口文件解析
  8. js jquery 等的地址
  9. Azure File文件共享(6):使用Python开发
  10. Android蓝牙开发深入解析
  11. 7、树莓派编程;gpio编程;led闪烁
  12. 关于input的检验问题
  13. 借助baidu的jsonp接口,做一个自己的候选词组件
  14. JavaScript的函数声明与函数表达式的区别
  15. WPF 绘制曲线图
  16. 被高通收购的CSR是一家怎样的公司
  17. 前端开发面试题-CSS(转载)
  18. BUG管理工具——Mantis安装配置
  19. jsonp小案例
  20. react 使用map 的时候提示 没有返回值

热门文章

  1. CMD命令行实现复制一张图片1000份:
  2. python入门(二十讲):爬虫
  3. 解决VS2017中出现:This function or variable may be unsafe
  4. 在VS2017中配置VLD(Visual Leak Detector)内存泄漏检测工具
  5. JetBrains PyCharm 2018.2.1 x64永久激活码
  6. UVA 11384 Help is needed for Dexter(递归)
  7. shell 参数与逻辑结构语句
  8. javascipt——jQuery
  9. 删除设备和驱动器中的PPS、百度云、360云盘图标
  10. 修改环境变量后,导致一些常用命令失效,如ll,ls,vi不能用