Сообщение компилятора является одним из тех сообщений, которые не имеют смысла с языковой точки зрения, но раскрывают внутреннюю работу компилятора, последовательность, в которой работает его внутренняя логика.
В вашем случае вы используете rvalue (NULL
) для инициализации ссылки. Когда такая инициализация разрешена, значение преобразовывается во временный объект, к которому будет привязана ссылка. Итак, компилятор сразу понял это и сообщил вам об этом с диагностическим сообщением.
В действительности, подобный трюк допустим только для const
ссылок, поэтому ваш код не работает, поскольку в нашем случае ссылка не const
. Кроме того, ссылка struct
, как и ссылка в вашем коде, не может быть инициализирована с NULL
rvalue (который имеет целочисленный тип), поэтому она также прерывается по этой причине.
Хотя сообщение компилятора вводит в заблуждение. Текст сообщения, по-видимому, подразумевает, что инициализировать ссылки на элементы временными объектами незаконно. На самом деле, это допустимо в C ++ (как только вышеуказанные проблемы будут исправлены), хотя это не имеет смысла. Но, как мне кажется, когда плохо сформированный код сопровождается хотя бы каким-то сообщением об ошибке, все должно быть в порядке ...