It means the member will be invoked when the object is an lvalue reference.
[C++11: 9.3.1/5]:
A non-static member function may be declared with a ref-qualifier (8.3.5); see 13.3.1.
[C++11: 13.3.1/4]:
For non-static member functions, the type of the implicit object parameter is
- “lvalue reference to cv
X
” for functions declared without a ref-qualifier or with the &
ref-qualifier
- “rvalue reference to cv
X
” for functions declared with the &&
ref-qualifier
where X
is the class of which the function is a member and cv is the cv-qualification on the member function declaration. [..]
(and some more rules that I can't find)
Without a ref-qualifier, the function can always be invoked, regardless of the value category of the expression through which you're invoking it:
struct foo
{
void bar() {}
void bar1() & {}
void bar2() && {}
};
int main()
{
foo().bar(); // (always fine)
foo().bar1(); // doesn't compile because bar1() requires an lvalue
foo().bar2();
foo f;
f.bar(); // (always fine)
f.bar1();
f.bar2(); // doesn't compile because bar2() requires an rvalue
}
Live demo (thanks Praetorian)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…