Подтвердить что ты не робот

Что такое амперсанд, когда используется после названия класса, такого как ostream & operator << (...)?

Я знаю обо всех указателях, а амперсанд означает "адрес", но что это значит в этой ситуации?

Кроме того, при перегрузке операторов, почему это распространено, объявляют параметры с константой?

4b9b3361

Ответ 1

В этом случае вы возвращаете ссылку на объект ostream. Строгое мышление об амперсанде как "адресе" не всегда будет работать для вас. Здесь некоторая информация из С++ FAQ Lite по ссылкам.

Насколько const идет, корректность const очень важна в безопасности типа С++ и что-то, что вы захотите сделать как можно больше. Другой страница из FAQ помогает в этом отношении. const помогает вам в изменениях, связанных с побочными эффектами, сбрасывая ваши данные в ситуациях, когда вы этого не ожидаете.

Ответ 2

В зависимости от контекста амперсанда это может означать две разные вещи. Ответ на ваш конкретный вопрос заключается в том, что это ссылка, а не "адрес". Они очень разные. Очень важно понять разницу.

Справочник по С++

Причина создания параметров const заключается в том, чтобы гарантировать, что функция не будет изменена функцией. Это гарантирует, что вызывающая сторона функции, которую передают параметры, не будет изменена.

Ответ 3

Это означает, что переменная является ссылкой. Это вроде как указатель, но не совсем.

Смотрите: Ссылка (С++)

Ответ 4

В объявлениях типа С++ амперсанд означает "ссылка". В этом случае operator << возвращает ссылку на объект ostream.

Так как он фактически возвращает *this, он фактически является тем же самым объектом ostream и означает, что вы можете связать вызовы с operator <<, аналогично этому:

os << "Hello" << " " << "World" << endl;