【发布时间】:2013-10-28 18:08:35
【问题描述】:
在阅读http://en.cppreference.com/w/cpp/language/member_functions 时,我遇到了一些我以前从未见过的东西:lvalue/rvalue Ref-qualified member functions。他们的目的是什么?
【问题讨论】:
在阅读http://en.cppreference.com/w/cpp/language/member_functions 时,我遇到了一些我以前从未见过的东西:lvalue/rvalue Ref-qualified member functions。他们的目的是什么?
【问题讨论】:
请阅读以下内容:
在重载决议期间,类 X 的非静态 cv 限定成员函数被视为一个函数,如果它没有 ref 限定符或如果它具有左值,则该函数采用对 cv 限定 X 的左值引用类型的隐式参数参考限定符。否则(如果它具有右值引用限定符),则将其视为一个函数,该函数采用对 cv 限定 X 的右值引用类型的隐式参数。
#include <iostream>
struct S {
void f() & { std::cout << "lvalue\n"; }
void f() &&{ std::cout << "rvalue\n"; }
};
int main(){
S s;
s.f(); // prints "lvalue"
std::move(s).f(); // prints "rvalue"
S().f(); // prints "rvalue"
}
因此,在重载决议期间,如果调用者对象是 lvalue,编译器会查找函数 &-qualified;如果调用者对象是 rvalue,则编译器会查找函数 &&-qualified。
【讨论】: