首页 >后端开发 >C++ >C 成员函数声明中的单 & 符号和双 & 符号有什么区别?

C 成员函数声明中的单 & 符号和双 & 符号有什么区别?

Patricia Arquette
Patricia Arquette原创
2024-12-06 13:34:13428浏览

What's the Difference Between Single and Double Ampersands in C   Member Function Declarations?

深入解读成员函数声明中的 & 符号

在 C 中,非静态成员函数可以用 ref 限定符修饰。这些限定符指定传递给函数的隐式对象参数的引用类别。

让我们探讨一下两个常见的引用限定符:

  1. 单个与号 (&) :表示可以使用对对象。
  2. 双与号 (&&):表示可以使用对象的右值引用来调用该函数。

不指定任何引用限定符,无论对象的值类别如何,都可以调用该函数。

来说明区别:

struct Foo {
    void bar() {}  // Default: can be invoked with both lvalues and rvalues
    void bar1() & {}  // Can only be invoked with lvalues
    void bar2() && {}  // Can only be invoked with rvalues
};

在上面的示例中:

  • bar() 可以在左值(对象)和右值(临时对象)上调用。
  • bar1() 只能在左值上调用,因为它需要对对象。
  • bar2() 只能在右值上调用,因为它需要对该对象的右值引用。

这里有一个现场演示:

int main() {
    Foo f;
    f.bar();
    f.bar1();
    Foo().bar2();  // Error: bar2 requires an rvalue
}

了解这些引用限定符允许您根据所调用的对象的引用类别来控制对成员函数的访问上。

以上是C 成员函数声明中的单 & 符号和双 & 符号有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!

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