Зачем использовать квалификатор const в возвращаемом значении?
Добрый вечер.
String& String::test(const String&)const;
Тут все понятно: обещаем компилятору не изменять объект, возвращаем то-же, что получаем (ссылку на объект), запрещаем менять структуру входящего объекта
Не понятно только назначение следующего прототипа: const String& String::test(const String&)const;
А именно первого квалификатора. Зачем в возврат указывать квалификатор const?
sddvxd, простой пример.
У вас есть хеш-таблица с ключами типа String.
Если вы будете возвращать копию ключа, то у вас будет оверхед.
Если ссылку или указатель, то вы можете поменять ключ, у него изменится хеш-код, но расположение в таблице останется тем же. А следовательно вы потеряете доступ к этому значению.
А если вы будете возвращать константную ссылку или указатель на константу, то это будет и быстро и безопасно.