构造函数期间的初始化?

9
我写了以下代码:
struct A{
    int a;
    int b;
    A(int c): a(c), b(a){ }
};


int main()
{
    A b(10);
}

现在,我不确定使用 a(c), b(a) 初始化 b 是否合适。这样做会导致未定义行为吗?

1个回答

11

没问题,成员变量的初始化顺序是按照在类中声明的顺序进行的。请注意,初始化程序的顺序无关紧要,因此这样做也可以(但不是好习惯):

struct A{
    int a;
    int b;
    A(int c): b(a), a(c) { }
};

但是这样做不起作用:

struct A{
    int b;
    int a;
    A(int c) : a(c), b(a) { } 
};

如果初始化顺序与声明顺序不匹配,一些编译器可以给出警告。


8
请按照声明的顺序初始化它们,否则可能会引起混淆。 - xiaofeng.li

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接