1, Компилирует.Перечислите инициалы для A и A1 и конструктор копирования по умолчанию для A2
То, что вы называете Список init , в этом случае на самом деле агрегатная инициализация , потому что StructTest
это совокупность.Это разрешено, поскольку наличие явно дефолтного или удаленного конструктора все еще делает класс агрегатным.
2, Компилируется.Конструктор по умолчанию для A и списка init A1? И конструктор копирования по умолчанию для A2
A1
инициализируется агрегатом, как это было в 1. Остальное верно
1 + 3 или 2 + 3, не компилируется из-за удаленного конструктора копирования для A2
Это ожидаемое поведение, поскольку конструктор копирования помечен как удаленный.
1 + 4, Компилирует.Конструктор по умолчанию для A и списка init A1? И конструктор копирования по умолчанию для A2
Опять же, агрегатная инициализация для A
и A1
2 + 4Компилирует.Конструктор по умолчанию для A и списка init A1? И конструктор копирования по умолчанию для A2
A
и A1
будут инициализированы агрегированно, но при этом он будет использовать инициализатор элемента по умолчанию Var
, когдаинициализация A
per [dcl.init.aggr] /5.1
1 + 5, не компилируется.Говорит, что в A отсутствует (удален) конструктор по умолчанию, и нет соответствующего конструктора для A1?
5 - это предоставленный пользователем конструктор по умолчанию или удаленный.Это означает, что StructTest
больше не является агрегатом, и вы не можете больше его инициализировать.
2 + 5, не компилируется.Нет подходящего конструктора для A1?
По той же причине, что и 1 + 5