Это пропущенная оптимизация, когда известная во время компиляции ссылка занимает место в структуре?

Посмотрите этот пример:

struct Foo {
    int a;
    int &b = a;
};

Это пропущенная оптимизация, если sizeof(Foo)!=sizeof(int)?

Я имею в виду, может ли компилятор удалить b из структуры, как это всегда относится к a?

Есть ли что-нибудь, что мешает компилятору выполнить это преобразование?

(Обратите внимание, что struct Foo выглядит так, как есть. Нет конструкторов и т.д. Но вы можете добавить что-нибудь вокруг Foo, что показывает, что эта оптимизация будет нарушать стандарт)

Ответы

Ответ 1

Нет, потому что вы можете использовать агрегатную инициализацию переменной, чтобы она ссылалась на что-то другое.

struct Foo {
    int a;
    int &b = a;
};

int c;
Foo f{7, c};