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