Aggregate initialization 聚合体初始化

/// MARK: - Aggregate initialization  集合初始化
/// 聚合的定义
/// 1、没有定义 explicit(明确) 构造函数
/// 2、没有使用using声明继承的构造函数
/// 3、没有使用 private 、protected的非静态数据成员
/// 4、没有virtual函数
/// 5 、没有使用 virtual 、 private、 pretected的基类

struct StkInfo{
    std::string name;
    std::string code;
    

};
/// 17 可以拥有基类
struct StkDetailInfo : StkInfo {
    double price;
    double num;
    std::string ratio;
    double high;
    double open;
    double low;
    double prev_close;
    
    void print_info() const {
        std::cout << "StkDetailInfo :" \
        << "\n name : " << name \
        << "\n code : " << code \
        << "\n price : " << price \
        << "\n ratio : " << ratio \
        << "\n high : " << high \
        << "\n open : " << open \
        << "\n low : " << low \
        << "\n prev_close : " << prev_close << std::endl;
    }
};

// 从多个基类中派生
template<typename T>
struct StkComplexType : std::string, std::complex<T> {
    std::string data;
};

int main(int argc, const char * argv[]) {
  
    //17 结构体初始化
    // 使用嵌套{} 初始化
    StkDetailInfo detail{{"HKEX", "00388"}, 256.000, 14.800, "-5.51%", 266.000, 265, 250.000, 268.400};
    detail.print_info();
    // 去掉嵌套初始化的 {}
    StkDetailInfo detail1{"HKEX", "00388", 256.000, 14.800, "-5.51%" , 266.000, 265, 250.000, 268.400};
    detail1.print_info();
    // 初始化为0
    StkDetailInfo detail2{};
    detail2.print_info();
    
    StkComplexType<float> s { {"HKEX"}, {256.000, 14.800}, "Dec 05 16:08"};
    StkComplexType<float> t {"HKEX", {256.000, 14.800}, "Dec 05 16:08"};
    
    // 内部嵌套的初值列表将按照继承时基类声明的顺序传递给基类。
    std::cout << s.data << std::endl;   // "Dec 05 16:08"
    
    std::cout << static_cast<std::string>(s) << std::endl; // "HKEX"
    
    std::cout << static_cast<std::complex<float>>(s) << std::endl; // {256.000, 14.800}
    
    std::cout << sizeof(decltype(s)) << std::endl;
    std::cout << sizeof(float) << std::endl;
    
    // 使用 std::is_aggregate<decltype(s)>::value 判断是否为 aggregate type
    std::cout << std::is_aggregate<decltype(s)>::value << std::endl;
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值