programing

C ++의 멤버 함수에 대한 const &, & 및 && 지정자

kingscode 2021. 1. 15. 08:27
반응형

C ++의 멤버 함수에 대한 const &, & 및 && 지정자


최근에 API를boost::optional 읽고 다음 과 같은 줄을 발견했습니다.

T const& operator *() const& ;
T&       operator *() & ;
T&&      operator *() && ;

또한 멤버 함수를 const &, & 및 &&로 정의하는 자체 프로그램을 작성했으며 (반환 유형에 대해 말하고 있지 않지만 세미콜론 바로 앞의 지정자) 제대로 작동하는 것 같습니다.

멤버 함수 const를 선언하는 것이 무엇을 의미하는지 알고 있지만 누구나 const &, & 및 &&를 선언하는 것이 무엇을 의미하는지 설명 할 수 있습니다.


const& 이는이 오버로드가 const, non-const 및 lvalue 객체에만 사용된다는 것을 의미합니다.

const A a = A();
*a;

& 이는이 오버로드가 상수가 아닌 객체에만 사용된다는 것을 의미합니다.

A a;
*a;

&& 즉,이 오버로드는 rvalue 객체에만 사용됩니다.

*A();

C ++ 11 표준의이 기능에 대한 자세한 내용은이 게시물을 읽을 수 있습니다. "* this에 대한 rvalue 참조"란 무엇입니까?


멤버 함수 참조 한정자이며 C ++ 11에 추가 된 기능 중 하나입니다. this함수 참조 한정자를 지정 하여 암시 적 개체 매개 변수가 lvalue인지 rvalue 인지에 따라 비 정적 멤버 함수를 오버로드 할 수 있습니다 ( some details ).

비 정적 멤버 함수에 대한 심판-한정자를 지정하려면 다음 중 하나와 기능을받을 수 있습니다 &또는 &&.

#include <iostream>
struct myStruct {
    void func() & { std::cout << "lvalue\n"; }
    void func() &&{ std::cout << "rvalue\n"; }
};

int main(){
    myStruct s;
    s.func();            // prints "lvalue"
    std::move(s).func(); // prints "rvalue"
    myStruct().func();   // prints "rvalue"
}

참조 URL : https://stackoverflow.com/questions/28066777/const-and-specifiers-for-member-functions-in-c

반응형