这个指针参考资格
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&& {}
};