gpt4 book ai didi

c++ - 初始化顺序问题

转载 作者:太空狗 更新时间:2023-10-29 20:00:05 26 4
gpt4 key购买 nike

给定代码示例:

class B {
//Some contents.
};

class C {
private:
B& b;
};

class A {
private:
B b;
C c;
};

C类有一个b的引用,所以需要用它来初始化。类 A 包含 B 的实例和 C 的实例。

我的问题是:我可以用 A 中的 B 实例初始化 A 中的 C 实例吗(假设我不厌其烦地将构造函数放入其中)?其次,我是否需要对 A 中的 B 执行任何显式初始化,还是因为它是类中的类类型而默认初始化?

最佳答案

成员变量按照它们在类声明中声明的顺序进行初始化(即使它们在构造函数的初始化列表中的顺序不同),所以是的,到时候c正在初始化,b将被初始化,您可以使用b来初始化c

正如 Ricardo Cardenes 指出的那样,即使您在类定义中的 b 之前声明了 c(这意味着您将传递 C::C 对未初始化的 B 的引用)但是,如果您使用 C::C 中的对象,则会导致未定义的行为。首先声明 b 更安全,因为虽然您现在可能不会在 C::C 中使用 b,但您将来可能会忘记它引用指向未初始化的 B,并导致 UB。

不,您不必显式初始化 b (除非它是 POD ),除非您不希望它是默认构造的。所以这段代码就是你想要的(同样,如果 B 不是 POD):

A::A() : c(b) { }

关于c++ - 初始化顺序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8808883/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com