【问题标题】:Is referencing a member during Initialization valid?在初始化期间引用成员是否有效?
【发布时间】:2022-11-20 23:15:17
【问题描述】:

我有一个包含多个成员的结构。
这些成员应该使用另一个成员来构造。
访问其他成员以初始化成员有效,还是我以这种方式调用 UB?

struct Data {
    int b;
};

struct Bar {

    Bar(Data& d): a(d.b){
    }
    int a;
};

struct Foo {
    Data data;
    Bar b;
};

int main() {
    Foo f {.data = Data(), .b = Bar(f.data)}; // b is constructed using f.data!
}

https://godbolt.org/z/fajPjo6oa

【问题讨论】:

    标签: c++ designated-initializer


    【解决方案1】:

    成员按照它们在 struct/class 中声明的顺序进行初始化,您可以在初始化期间有效地引用其他成员,只要它们在此时已经被初始化。 不管初始化是如何执行的,这都成立。

    【讨论】:

    • 使用构造函数还是指定的初始值设定项有区别吗?
    • @Raildex 号更新的答案。
    猜你喜欢
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多