Зачем нужен амперсанд после имени класса, например ostream& operator << (...)?

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

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

4 ответа

Решение

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

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

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

C++ Reference

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

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

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

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

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

См.: Справочник (C++)

Другие вопросы по тегам