Ответ 1
В примере, приведенном в getName()
, есть две перегруженные функции getName()
. Один с &&
а другой с const&
квалификаторами.
Без &
после const
, функция const std::string& getName() const
не может быть перегружена перегрузкой для значений r string Customer::getName() &&
.
Затем вы должны полностью удалить перегрузку rvalue из кода, если хотите, чтобы он работал.
Так как квалифицированные функции-члены ref были добавлены только в С++ 11 (что делает возможным получение значений для r), переход от const std::string& getName() const
к const std::string& getName() const&
был необходим для обеих перегрузок. возможный.
Проект стандарта С++ 17 n4659 гласит:
16.1 Перегружаемые объявления [over.load]
...2 Некоторые объявления функций не могут быть перегружены:
...
(2.3) - Объявления функций-членов с одинаковыми именами и одинаковым списком типов параметров, а также объявления шаблонов функций-членов с одинаковыми именами, одинаковым списком параметров-типов и одинаковыми списками параметров шаблона не могут быть перегружены, если таковые имеются из них, но не у всех, есть реф-классификатор.
Поскольку существует одна перегрузка getName()
с квалификатором ref (&&
), у другой также должен быть квалификатор ref. Вот почему const&
требуется.