Перегрузка операторов. Передача по ссылке.

Рейтинг: 1Ответов: 1Опубликовано: 09.03.2015

Доброго времени суток. При перегрузке оператора += передается const Logbook &rightLogbook. Константа - понятна, но с какой целью передача идет по ссылке? Ибо если передавать само значение (без &, просто const Logbook rightLogbook), то программа работает так же. Значение "правого" операнда все равно не будет изменяться. Много где находил, что идет передача по ссылке, но почему - не понятно :C.

  class Logbook {
    private:
    int logMonth, // Month covered by logbook
        logYear, // Year for this logbook
        entries[31]; // Logbook entries

void Logbook::operator+=(const Logbook &rightLogbook)
    {
    for(int i=1;i<=getDaysInMonth(); i++)
     {
     entries[i]=entries[i]+rightLogbook.entries[i];
     }
    }

Ответы

▲ 3Принят

Эффективность.

Представьте себе, что вы передаёте объект огромного размера по значению. При этом вызовется конструктор копирования, и практически впустую скопирует объект, который по окончанию процедуры будет просто выкинут за ненужностью.

Передача по ссылке позволяет этого избежать.