You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++14结构体继承中无法初始化基类成员?如何解决?

C++14中派生类初始化基类成员的解决方法

在C14标准中,带基类的derived结构体不属于聚合类,因此无法像基类base那样直接用{10}这种统一初始化语法来初始化;而C17放宽了聚合类的定义,允许无用户定义构造函数的派生类被视为聚合类,所以该写法在C++17中合法。

要在C++14中实现从derived初始化base的成员,有以下几种可行方案:

  • 继承基类的构造函数
    通过using声明继承基类的构造函数,让派生类复用基类的构造逻辑:

    struct base {
      int i;
    };
    
    struct derived : base {
        using base::base; // 继承base的构造函数
    };
    
    // 此时可以正常初始化
    derived d{10};
    
  • 手动定义派生类的构造函数
    显式编写派生类的构造函数,在初始化列表中调用基类的初始化逻辑:

    struct base {
      int i;
    };
    
    struct derived : base {
        derived(int val) : base{val} {}
    };
    
    derived d{10};
    
  • 用基类对象拷贝初始化派生类
    利用派生类的默认拷贝构造函数,用已初始化的基类对象来初始化派生类:

    derived d = base{10};
    

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 08:25:15