• 聚合初始化


    摘自时习之
    C++标准库中提供两个容器表示数组这个概念:array表示静态数组,vector表示动态数组 。这两个类型都可以使用列表初始化(list initilization)来初始化。

    std::array<int, 5> = {1, 2, 3, 4, 5};
    std::vector<int>   = {1, 2, 3, 4, 5};
    

    这实际上是聚合初始化。
    聚合初始化其实由来已久,在C语言中就存在了。

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

    在C++中对于聚合体(aggregate)的初始化称为聚合初始化,可以使用上面这种语法。 有两种类型的对象被称为聚合体:

    • 数组类型
    • 满足下列条件的类类型(通常是结构体(struct)或者联合体(union)):
      • 没有私有或保护的非静态数据成员
      • 没有用户提供的构造函数
      • 没有基类
      • 没有虚函数

    所以说下面这个结构体的对象可以使用聚合初始化:

    struct Aggregate {
        int i;
        int j;
    };
    
    Aggregate aggr = {1, 2};
    

    上面这些都没什么神奇的,真正神奇的是如果你的聚合体中间有嵌套,你可以不用使用花 括号分割:

    struct Aggregate {
        int arr[4];
        int j;
    };
    
    Aggregate aggr = {1, 2, 3, 4, 5};
    

    在上面这个初始化中,arr 成员会得到{1, 2, 3, 4}, 而 j 成员会初始化成 5 。

  • 相关阅读:
    ①---Java开发环境配置
    1.java的基础和数据类型
    0、原生jdbc工厂类
    spring中使用quartz动态添加定时任务执行sql
    app前端代码打包步骤
    less的解析笔记
    转:玩转HTML5移动页面(动效篇)
    HTML5属性备忘单
    玩转git和github
    js基础----数组
  • 原文地址:https://www.cnblogs.com/narjaja/p/10039614.html
Copyright © 2020-2023  润新知