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