Что означает оператор & при перегрузке операторов? C++

Столкнулся с такой записью:

class PhoneNumber
{friend ostream & operator << (ostream &, const PhoneNumber &);
friend istream & operator >> (istream &, PhoneNumber &);

И абсолютно не понимаю, что означает & здесь и зачем он нужен. По моим представлениям & - это оператор, возвращающий адрес операнды справа. То есть &peremennaya вернет адрес переменной. А тут?


Ответы (1 шт):

Автор решения: gbg

& тут относится к типу, возвращаемому из функции - это говорит от том, что функция возвращает ссылку на ostream или istream соответственно.

Да, у & много смыслов, но все они однозначны.

  • & как оператор.

Может быть унарным или бинарным:

-- В унарном случае он таки да, вернет указатель на операнд, к которому его применили.

-- В бинарном случае - вернет результат побитового И операндов.

  • & при объявлении типов. Превращает то что слева в ссылку.

  • & как часть логического оператора &&. && - особенный оператор, он не только делает свою работу, но и являлся (до C++11, см комментарий) точкой следования, и более того, если левый операнд - false, вычисление выражения справа гарантированно производиться не будет, а будет сразу выдано false в качестве результата. (Всегда сначала вычисляется то что слева, а потом, если слева - true, вычисляется то что справа.)

→ Ссылка