這個指標參考資格

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&& {}
};