【问题标题】:What is the purpose of Ref-qualified member functions ? [duplicate]Ref 限定的成员函数的目的是什么? [复制]
【发布时间】:2013-10-28 18:08:35
【问题描述】:

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

【问题讨论】:

    标签: c++ c++11


    【解决方案1】:

    请阅读以下内容:

    在重载决议期间,类 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。

    【讨论】:

    • 如果所有不人道的标准语言都加上一个清晰简洁的例子,这个世界会变得多么美好!
    • 我无法使用 C++98 进行测试。这是在 C++11 之后吗?
    • @Nick,是的
    猜你喜欢
    • 1970-01-01
    • 2017-05-20
    • 2013-05-20
    • 2015-09-13
    • 2011-05-02
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 2015-07-15
    相关资源
    最近更新 更多