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

new*_*int 16 c++ c++11

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

FKa*_*ria 27

请阅读下面的内容:

在重载解析期间,类X的非静态cv限定成员函数被视为一个函数,如果它没有ref-qualifiers或者它具有左值ref-qualifier,则将类型为lvalue的隐式参数引用到cv-qualified X. .否则(如果它具有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"
}
Run Code Online (Sandbox Code Playgroud)

因此重载解析过程中,编译器会查找功能和-qualified如果主叫对象是一个lvalue或功能&& -合格如果调用方对象是rvalue.

  • 如果所有不人道的标准都以一个清晰简洁的例子得到增强,那么这个世界将成为一个多么好的地方! (9认同)