Ответ 1
Нет, потому что вы можете использовать агрегатную инициализацию переменной, чтобы она ссылалась на что-то другое.
struct Foo {
int a;
int &b = a;
};
int c;
Foo f{7, c};
Посмотрите этот пример:
struct Foo {
int a;
int &b = a;
};
Это пропущенная оптимизация, если sizeof(Foo)!=sizeof(int)
?
Я имею в виду, может ли компилятор удалить b
из структуры, как это всегда относится к a
?
Есть ли что-нибудь, что мешает компилятору выполнить это преобразование?
(Обратите внимание, что struct Foo
выглядит так, как есть. Нет конструкторов и т.д. Но вы можете добавить что-нибудь вокруг Foo
, что показывает, что эта оптимизация будет нарушать стандарт)
Нет, потому что вы можете использовать агрегатную инициализацию переменной, чтобы она ссылалась на что-то другое.
struct Foo {
int a;
int &b = a;
};
int c;
Foo f{7, c};