C++11使得基于引用限定符(reference qualifiers)重载成员函数成为可能:
class Foo {
public:
void f() &; // for when *this is an lvalue
void f() &&; // for when *this is an rvalue
};
Foo obj;
obj.f(); // calls lvalue overload
std::move(obj).f(); // calls rvalue overload
我了解这是如何工作的,但它有什么用例?
我看到N2819提议将标准库中的大多数赋值运算符限制为lvalue目标(即在赋值运算符中添加"&
"引用限定符),但这被拒绝了。所以这是一个委员会决定不采用的潜在用例。那么,什么是合理的用例?
huge_heavy_class&& get() &&
是错误的(会导致悬空引用),应该改为huge_heavy_class get() &&
。此外,auto hhc = std::move(factory().get());
是多余的。 - ildjarnstd::move(factory().get())
而需要编写大量代码 - 我想我需要让这一点更加清晰明了。 - Casey