这个指针参考资格

Version >= C++ 11

this cv-qualifiers 类似,我们也可以将 ref-qualifiers 应用于*this。Ref-qualifiers 用于在 normal 和 rvalue 引用语义之间进行选择,允许编译器根据哪个更合适使用复制或移动语义,并应用于*this 而不是 this

请注意,尽管 ref-qualifiers 使用了引用语法,但 this 本身仍然是一个指针。另请注意,ref-qualifiers 实际上并没有改变*this 的类型; 通过像对待它们一样来描述和理解它们的效果更容易。

struct RefQualifiers {
    std::string s;

    RefQualifiers(const std::string& ss = "The nameless one.") : s(ss) {}

    // Normal version.
    void func() &  { std::cout << "Accessed on normal instance "    << s << std::endl; }
    // Rvalue version.
    void func() && { std::cout << "Accessed on temporary instance " << s << std::endl; }

    const std::string& still_a_pointer() &  { return this->s; }
    const std::string& still_a_pointer() && { this->s = "Bob"; return this->s; }
};

// ...

RefQualifiers rf("Fred");
rf.func();              // Output:  Accessed on normal instance Fred
RefQualifiers{}.func(); // Output:  Accessed on temporary instance The nameless one

成员函数在有和没有 ref-qualifiers 的情况下都不能有重载; 程序员必须在一个或另一个之间进行选择。值得庆幸的是,cv-qualifiers 可以与 ref-qualifiers 一起使用,允许遵循 const 正确性规则。

struct RefCV {
    void func() &                {}
    void func() &&               {}
    void func() const&           {}
    void func() const&&          {}
    void func() volatile&        {}
    void func() volatile&&       {}
    void func() const volatile&  {}
    void func() const volatile&& {}
};