Что такое амперсанд, когда используется после названия класса, такого как ostream & operator << (...)?
Я знаю обо всех указателях, а амперсанд означает "адрес", но что это значит в этой ситуации?
Кроме того, при перегрузке операторов, почему это распространено, объявляют параметры с константой?
Ответ 1
В этом случае вы возвращаете ссылку на объект ostream. Строгое мышление об амперсанде как "адресе" не всегда будет работать для вас. Здесь некоторая информация из С++ FAQ Lite по ссылкам.
Насколько const идет, корректность const очень важна в безопасности типа С++ и что-то, что вы захотите сделать как можно больше. Другой страница из FAQ помогает в этом отношении. const помогает вам в изменениях, связанных с побочными эффектами, сбрасывая ваши данные в ситуациях, когда вы этого не ожидаете.
Ответ 2
В зависимости от контекста амперсанда это может означать две разные вещи. Ответ на ваш конкретный вопрос заключается в том, что это ссылка, а не "адрес". Они очень разные. Очень важно понять разницу.
Причина создания параметров const заключается в том, чтобы гарантировать, что функция не будет изменена функцией. Это гарантирует, что вызывающая сторона функции, которую передают параметры, не будет изменена.
Ответ 3
Это означает, что переменная является ссылкой. Это вроде как указатель, но не совсем.
В объявлениях типа С++ амперсанд означает "ссылка". В этом случае operator << возвращает ссылку на объект ostream.
Так как он фактически возвращает *this, он фактически является тем же самым объектом ostream и означает, что вы можете связать вызовы с operator <<, аналогично этому: