Ref限定成员函数的目的是什么

What is the purpose of Ref-qualified member functions ?

本文关键字:是什么 函数 成员 Ref      更新时间:2023-10-16

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

只需阅读以下内容:

在重载解析期间,类 X 的非静态 cv 限定成员函数被视为一个函数,如果它没有 ref 限定符或具有 lvalue ref 限定符,则采用 lvalue 类型的隐式参数引用到 cv 限定的 X。否则(如果它具有右值引用限定符),则将其视为将右值类型的隐式参数引用到符合 cv 的 X 的函数。

#include <iostream>
struct S {
    void f() & { std::cout << "lvaluen"; }
    void f() &&{ std::cout << "rvaluen"; }
};
 
int main(){
    S s;
    s.f();            // prints "lvalue"
    std::move(s).f(); // prints "rvalue"
    S().f();          // prints "rvalue"
}

因此,在重载解析期间,如果调用方对象是lvalue,编译器会查找函数 &-qualid;如果调用方对象是rvalue,则编译器会查找函数 &&-qualed。