А как насчет переменных-членов, которых нет в списке инициализаторов?
Вне зависимости от того, есть переменные в списке инициализаторов или нет, это не имеет значения. Если переменная отсутствует в списке инициализаторов (и не имеет инициализатора элементов по умолчанию), то она инициализируется по умолчанию.
y
инициализируется после x
. Это не из-за списка инициализатора элемента, потому что список инициализатора элемента не влияет на порядок инициализации элементов. Члены инициализируются в порядке их объявления.
Однако, y
инициализирован или нет, также не имеет значения. Он хорошо сформирован для привязки ссылки к члену до его инициализации (за исключением привязки к виртуальной базе неинициализированного члена; в нем будет UB).
Что касается безопасности (или, возможно, правильности , точнее), я рекомендую вам уделить некоторое время, чтобы обдумать, что происходит при копировании Foo
. На что будет ссылаться x
? Это то, что пользователь класса ожидает?