По сути, в чем разница между:
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;
}
Имеет ли значение подпись функции? Я не думаю о дате& как тип * Дата, так что я не уверен, что это меняет. Это только препятствует тому, чтобы копия была сделана при возврате? Но тогда ты не вернешься &дд?
Первая функция возвращает константную ссылку на статический объект, так что вы можете сделать это:
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
не упоминаются как конструкторы.
Других решений пока нет …