Амперсанды в сигнатуре функции-члена
Скажите как называются амперсанды в сигнатуре функции-члена и какую роль они выполняют. Вот пример:
class some_class
{
void foo() & ;
void foo() && ;
void foo() const & ;
void foo() const && ;
};
Ответы (1 шт):
Автор решения: HolyBlackCat
→ Ссылка
Они называются reference qualifiers.
& означает, что этот метод можно вызывать только на lvalue, а &&, соответственно - только на rvalue.
В качестве исключения, const & методы можно вызывать и на rvalue.
Некоторые навешивают & на operator=, чтобы some_class{} = ... не компилировалось.
Еще, их можно использовать для хитрых оптимизаций вроде:
class Vector
{
std::vector<int> vec;
const std::vector<int> &GetValue() const & {return vec;}
std::vector<int> &&GetValue() && {return std::move(vec);}
};