這個指標參考資格
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&& {}
};