在结构中初始化一个字符串对象

pac*_*tie 1 c++ string

我有一个看起来像这样的结构:

typedef struct {
    int a;
    //other fields
    string s1;
    string s2;
} strMyStruct;
Run Code Online (Sandbox Code Playgroud)

在下面的代码中,append()方法将崩溃,因为x1.s1未构造字符串对象.

strMyStruct x1;
memset(&x1, 0, sizeof(x1));
x1.a = 100
x1.s1.append("....");
Run Code Online (Sandbox Code Playgroud)

我可以做新的放置来解决它new (x1.s1) string;,但它太麻烦了,我没有完全控制结构strMyStruct:有人可能会添加另一个字符串作为一个字段到这个结构并开始使用它并遇到崩溃问题,直到他记得做新的招数.

真的希望字符串类可以在初始化完成后正确处理它memset(&x1, 0, sizeof(x1));.这有诀窍吗?

Cor*_*mer 5

您可以使用统一初始化来默认构造对象.

strMyStruct x1{};
Run Code Online (Sandbox Code Playgroud)

这将默认初始化该对象的成员.你写它的方式,变量被声明但没有初始化.您还可以使用此语法来初始化结构.

strMyStruct x2{5, "foo", "bar"};
Run Code Online (Sandbox Code Playgroud)