C ++中成员函数的const&,&和&&&说明符

最近,我正在阅读的API,boost::optional发现其中的内容:


T const& operator *() const& ;

T&       operator *() & ;

T&&      operator *() && ;

我还编写了自己的程序,该程序将成员函数定义为const&,&和&&(请注意,我并不是在讲返回类型,而是在分号之前的说明符),并且它们似乎可以正常工作。


我知道声明成员函数const的含义,但是任何人都可以解释声明const&,&和&&的含义。


桃花长相依
浏览 904回答 3
3回答

湖上湖

const& 意味着,此重载将仅用于const,non-const和lvalue对象。const A a = A();*a;& 意味着,此重载将仅用于非const对象。A a;*a;&& 意味着,此重载将仅用于右值对象。*A();有关C ++ 11标准此功能的更多信息,您可以阅读这篇文章什么是“ * this的右值参考”?

慕的地10843

它是成员函数ref限定符,它是C ++ 11中添加的功能之一。this通过指定函数ref限定符(一些细节),可以基于隐式对象参数是左值还是右值来重载非静态成员函数。要指定REF-预选赛非静态成员函数,您可以用限定功能&或&&。#include <iostream>struct myStruct {&nbsp; &nbsp; void func() & { std::cout << "lvalue\n"; }&nbsp; &nbsp; void func() &&{ std::cout << "rvalue\n"; }};int main(){&nbsp; &nbsp; myStruct s;&nbsp; &nbsp; s.func();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // prints "lvalue"&nbsp; &nbsp; std::move(s).func(); // prints "rvalue"&nbsp; &nbsp; myStruct().func();&nbsp; &nbsp;// prints "rvalue"}

慕容3067478

正如您所问的,这些并不是“必需的”。但是它们提供了某些可选的优化。您可能只是拥有T operator *();而已-可以编译,但是会产生一些奇怪的后果-&nbsp;*p = x不会做您期望的事情。我认为重要的是返回类型-我们想要具有不同返回类型的多个重载。一旦了解了不同返回类型的可取性,您还将看到我们最终需要使用限定符来控制每个调用使用哪种重载(以及哪种返回类型)。
打开App,查看更多内容
随时随地看视频慕课网APP