Возвращение объекта и ссылки в сигнатуре конструктора по умолчанию

По сути, в чем разница между:

const Date& default_date()
{
static Date dd(2001,Date::Jan,1);
return dd;
}

а также

const Date default_date()
{
static Date dd(2001,Date::Jan,1);
return dd;
}

Имеет ли значение подпись функции? Я не думаю о дате& как тип * Дата, так что я не уверен, что это меняет. Это только препятствует тому, чтобы копия была сделана при возврате? Но тогда ты не вернешься &дд?

0

Решение

Первая функция возвращает константную ссылку на статический объект, так что вы можете сделать это:

const Date& d = default_date(); // d is a reference to the original

или же

Date d = default_date(); // d is a copy of the original,
// provided there is a copy constructor

Второй делает копию static Date объект, так что вы можете получить только копию

Date d = default_date(); // d is a copy of the original

возврате &dd вернет адрес статического объекта, который затем может быть назначен указателю на Date, Синтаксис для оператора return одинаков для возврата по ссылке или возврата по значению. Семантика зависит от типа возвращаемого значения функции.

Обратите внимание, что в C ++ такие функции, как default_date не упоминаются как конструкторы.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector