не является ли "other" ссылкой на объект Node?
Это так. И ссылка не является указателем . Это прямой псевдоним для объекта. Когда вы взаимодействуете с ним, вы взаимодействуете непосредственно с объектом, а не с его адресом. С другой стороны, указатель на объект является контейнером для адреса. Когда вы взаимодействуете с указателем, вы не воздействуете и на объект, на который он указывает, только на адрес. Вместо этого вы разыменовываете его, чтобы получить псевдоним для объекта, и именно так вы воздействуете на точку доступа.
Поэтому из-за их различий вы обычно не можете сравнивать указатели и ссылки. Поэтому, чтобы проверить идентичность объекта, вам нужно получить адрес из ссылок, а затем сравнить его с указателем this
.
Это потому, что это константный указатель на объект Node, но 'other - это объект const Node?
Нет, это потому, что *this
получает псевдоним объекта, а other
уже есть. Когда вы пишете *this != other
, вы пытаетесь применить !=
к самим объектам , а не к их адресам. Поскольку, вероятно, operator!=
не определено, вы не можете сделать сравнение. Я также не подозреваю, что вы хотите.
Потому что даже что-то подобное не сработает
(const Node)*this
разыменовывает this
, таким образом получая что-то, что не указатель (но объект), а затем пытается привести объект к типу указателя. Это не то, что язык поддерживает неявно. Отсюда и ошибка.