>백엔드 개발 >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에서 비정적 멤버 함수는 참조 한정자로 장식될 수 있습니다. . 이러한 한정자는 함수에 전달되는 암시적 객체 매개변수의 참조 범주를 지정합니다.

두 가지 일반적인 참조 한정자를 살펴보겠습니다.

  1. 단일 앰퍼샌드(&) : 함수에 대한 lvalue 참조를 사용하여 호출할 수 있음을 나타냅니다. object.
  2. 이중 앰퍼샌드(&&): 객체에 대한 rvalue 참조를 사용하여 함수를 호출할 수 있음을 나타냅니다.

ref 한정자를 지정하지 않고 , 객체의 값 범주에 관계없이 함수를 호출할 수 있습니다.

차이점:

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()는 lvalue(객체)와 rvalue(임시 객체) 모두에서 호출될 수 있습니다.
  • bar1()은 lvalue에 대해서만 호출할 수 있습니다. 왜냐하면 bar1()에는 lvalue 참조가 필요하기 때문입니다. object.
  • bar2()는 개체에 대한 rvalue 참조가 필요하기 때문에 rvalue에서만 호출할 수 있습니다.

다음은 라이브 데모입니다.

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

이러한 참조 한정자를 이해하면 호출되는 개체의 참조 범주에 따라 멤버 함수에 대한 액세스를 제어할 수 있습니다. 에.

위 내용은 C 멤버 함수 선언에서 단일 앰퍼샌드와 이중 앰퍼샌드의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.