C ++ оператор перегрузки << зачем и нужен? - PullRequest
0 голосов
/ 02 апреля 2020
ostream& operator<<(ostream& cout, const Complex& num) {
    std::cout << num.a << "+i" << num.b;
    return std::cout;
}

Когда я перегружаю оператор <<, почему я должен кодировать & рядом с ostream?

1 Ответ

1 голос
/ 02 апреля 2020

Поскольку

для типа возврата:

  • ostream объекты не могут быть скопированы, поэтому их нельзя использовать в качестве типа возврата, если вы не выполните операцию move.

для параметра:

  • ostream объекты не копируются, поэтому их нельзя использовать в качестве типа параметра, если вы не выполните операцию move.
  • Ожидается, что operator << может изменить состояние параметра, поэтому мы должны передать по ссылке.

И, учитывая второй принцип для параметра, ваш код должен быть исправлен на:

ostream& operator<<(ostream& cout, const Complex& num) {
    cout << num.a << "+i" << num.b;
    return cout;
}
...