首页 >后端开发 >C++ >C 成员函数声明中的单个与号 (&) 意味着什么?

C 成员函数声明中的单个与号 (&) 意味着什么?

Susan Sarandon
Susan Sarandon原创
2024-12-15 11:55:09691浏览

What Does the Single Ampersand (&) Mean in a C   Member Function Declaration?

理解成员函数声明中的单个 & 符号

在给定的代码片段中:

class wrap {
   operator obj() const & { ... }   //Copy from me.
   operator obj() && { ... }  //Move from me.
};

我们遇到两个具有不同 ref 的成员函数声明- 限定符(& 和 &&)。但是,单个与号 (&) 表示什么?

非静态成员函数声明中的单个与号表示当对象是左值引用时调用该成员函数。默认情况下,可以在左值和右值对象上调用非静态成员函数。但是,通过指定 &,该函数只能接受左值。

为了说明差异:

struct foo
{
   void bar() {}
   void bar1() & {}
   void bar2() && {}
};
  • bar() 同时接受左值和右值。
  • bar1() 需要左值引用,因此只能在左值上调用它对象。
  • bar2() 需要右值引用,因此只能在右值对象上调用。

示例:

int main()
{
   foo().bar();  // (always fine)
   foo().bar1(); // doesn't compile because `bar1()` requires an lvalue
   foo().bar2(); // doesn't compile because `bar2()` requires an rvalue

   foo f;
   f.bar();      // (always fine)
   f.bar1();
   f.bar2();     // doesn't compile because `bar2()` requires an rvalue
}

以上是C 成员函数声明中的单个与号 (&) 意味着什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn