>백엔드 개발 >C++ >C 멤버 함수: 매개변수 목록에서 `&`와 `&&`는 무엇을 의미하나요?

C 멤버 함수: 매개변수 목록에서 `&`와 `&&`는 무엇을 의미하나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-12 17:15:12580검색

C   Member Functions: What Do `&` and `&&` Mean in Parameter Lists?

멤버 함수 매개변수 목록: & 기호 공개

C에서 멤버 함수를 선언할 때 매개변수 목록 뒤에 & 및 && 기호를 사용할 수 있습니다. 참조 한정자라고 하는 이러한 기호는 암시적 개체 매개 변수의 참조 유형을 나타냅니다.

단일 앰퍼샌드(&)

단일 앰퍼샌드(&)는 멤버 함수가 호출됨을 나타냅니다. 객체가 lvalue 참조인 경우. lvalue 참조는 특정 메모리 위치에 저장된 기존 개체를 참조합니다. 다음 코드 조각은 그 사용법을 보여줍니다.

class wrap {
public:
   operator obj() const & { ... }
   operator obj() && { ... }
private:
   obj data_;
};

객체가 lvalue 참조일 때 & ref 한정자가 있는 연산자 obj() 함수가 호출됩니다. 즉, lvalue 및 rvalue 표현식을 모두 사용하여 호출할 수 있습니다.

앰퍼샌드 없음

ref 한정자가 없으면 암시적 개체 매개변수가 lvalue 참조로 처리됩니다. 이를 통해 lvalue 및 rvalue 표현식 모두를 사용하여 멤버 함수를 호출할 수 있습니다. 아래 코드는 이 동작을 보여줍니다.

struct foo
{
    void bar() {}
};

int main()
{
    foo().bar(); // (always fine)
    foo f;
    f.bar();      // (always fine)
}

Rvalue 참조(&&)

&& ref 한정자는 개체가 rvalue 참조일 때 멤버 함수가 호출된다는 것을 나타냅니다. rvalue 참조는 특정 메모리 위치에 바인딩할 수 없는 임시 또는 표현식 평가 개체를 나타냅니다.

주요 차이점

다음 표에는 단일 앰퍼샌드(&)와 앰퍼샌드(&) 간의 차이점이 요약되어 있습니다. 앰퍼샌드 없음:

Ref-Qualifier Reference Type Can be Invoked With
& lvalue reference lvalue and rvalue expressions
None lvalue reference lvalue and rvalue expressions

이러한 참조 한정자를 이해하는 것은 멤버 함수를 올바르게 구현하고 다음을 기반으로 해당 동작을 조정하는 데 중요합니다. 맥락.

위 내용은 C 멤버 함수: 매개변수 목록에서 `&`와 `&&`는 무엇을 의미하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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