zoukankan      html  css  js  c++  java
  • 聚合初始化

    摘自时习之
    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 。

  • 相关阅读:
    git 镜像地址
    IntelliJ IDEA 2019 控制台中文乱码问题
    LINUX配置本地YUM源
    动态添加js的代码
    Java 多线程
    Java I/O系统
    Java 中的容器 Collection 和 Map
    Java 数组
    javaweb的四大作用域
    三层 转自http://git.oschina.net/tzhsweet/superui
  • 原文地址:https://www.cnblogs.com/narjaja/p/10039614.html
Copyright © 2011-2022 走看看