Ref-qualified成员函数的目的是什么?

时间:2013-10-20 05:54:38

标签: c++ c++11

在阅读http://en.cppreference.com/w/cpp/language/member_functions时,我遇到了一些我以前从未见过的事:lvalue/rvalue Ref-qualified member functions。他们的目的是什么?

1 个答案:

答案 0 :(得分:24)

请阅读以下内容:

  

在重载解析期间,类X的非静态cv限定成员函数被视为一个函数,如果它没有ref-qualifiers或者它具有左值,则将带有lvalue类型的隐式参数引用到cv-qualified X REF-预选赛。否则(如果它有rvalue ref-qualifier),它被视为一个函数,它采用类型为rvalue的隐式参数来引用cv-qualified 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,则编译器会查找函数&amp; -qualified;如果调用者对象是rvalue,则编译器会查找函数&amp;&amp; -qualified。