结构体的静态初始化扩展结构

Bra*_*rad 5 c++

我试图找到一种方法来静态初始化一个扩展另一个结构的结构.

如果我在c ++中有一个结构:

struct aStruct {
    int a;
    int b;
};
Run Code Online (Sandbox Code Playgroud)

我可以使用以下命令静态初始化此实例:

aStruct aStructInst = { 1, 2 };
Run Code Online (Sandbox Code Playgroud)

如果我想要一个子对象来存储其他信息,我也可以扩展这个结构:

struct bStruct : aStruct {
    int c;
};
Run Code Online (Sandbox Code Playgroud)

有没有办法静态初始化一个实例bStruct?我尝试了一些变化,但没有运气.静态初始化在我的用例中非常重要,可以将(全部)数据保存在RAM之外,这是非常有限的(嵌入式应用程序).

Jon*_*ely 6

您正在使用"聚合初始化",但具有基类的类不能是聚合,因此您不能使用聚合初始化.

正如上面的评论所说,如果你添加一个合适的构造函数,那么你可以使用相同的语法:

struct bStruct : aStruct {
    constexpr bStruct(int a, int b, int c) : aStruct{a, b}, c(c) { }
    int c;
};
Run Code Online (Sandbox Code Playgroud)

(您不需要构造函数,aStruct因为它仍然是聚合,因此仍然可以使用聚合初始化直接初始化).

  • @Slava它一般不保证*静态init,但*允许*static init.如果您使用此构造函数初始化的实体是非局部变量,并且构造函数参数都是常量表达式,则*then*它确实保证静态init.如果参数是常量表达式,它也很可能执行局部静态变量的静态初始化. (2认同)