Я инициализировал ссылку на константу z и попытался повторно инициализировать
Вы пытались, но не пытались. Когда для инициализации члена используется список инициализации члена конструктора, любой инициализатор члена по умолчанию игнорируется. z
никогда не ссылался на временное значение со значением 9
. Таким образом, правила C ++ все еще очень важны, вы не можете пересылать ссылку, и никогда не было даже попытки сделать это.
И если бы вы не инициализировали z
с помощью c
, у вас в руках была бы свисающая ссылка и код с неопределенным поведением. Потому что 9
это не объект, это литерал. Ссылки могут привязываться только к объектам, поэтому вы привязали бы его к временному объекту, который вышел бы из области видимости после завершения инициализации вашего объекта.