Действительна ли ссылка на элемент во время инициализации?

У меня есть структура, содержащая несколько членов. эти члены должны быть построены с использованием другого члена.
Действителен ли доступ к этому другому члену для инициализации членов или я вызываю 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

Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
2
0
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Члены инициализируются в том порядке, в котором они объявлены в struct/class, и вы можете правильно ссылаться на другие члены во время инициализации, если они уже были инициализированы в этот момент. Это выполняется независимо от того, как выполняется инициализация.

имеет ли значение, использую ли я конструкторы или назначенные инициализаторы?

Raildex 20.11.2022 16:14

@Raildex Нет. Обновленный ответ.

Jesper Juhl 20.11.2022 16:15

Другие вопросы по теме