"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > C ++에서 클래스 유형의 RValue에 할당 할 수 있습니까?

C ++에서 클래스 유형의 RValue에 할당 할 수 있습니까?

2025-03-24에 게시되었습니다
검색:294

 Can You Assign to an Rvalue of Class Type in C  ?

클래스 y { 공공의: 명시 적 y (size_t num = 0) {} }; int main () { y (1) = y (0); // 무엇?!? 반환 0; }

놀랍게도,이 코드는 생성자 y (1)에 의해 반환 된 객체가 rvalue이더라도 성공적으로 컴파일됩니다. 이 기사는이 예상치 못한 행동의 이유를 탐구합니다.

클래스 유형 rvalues에 대한 할당

class Y {
public:
    explicit Y(size_t num = 0) {}
};

int main() {
    Y(1) = Y(0); // WHAT?!?
    return 0;
}
위의 예에서 클래스 Y의 할당 연산자는 다음과 같이 합성됩니다. 즉, LValues ​​(참조 된 객체) 및 RValues ​​(보장되지 않은 개체) 모두에 적용될 수 있음을 의미합니다.

생성자 return 값

객체가 rvalue를 반환하는 생성자를 사용하여 생성자가 생성 될 때 컴파일러는 메모리에서 임시 객체를 생성합니다. 이 임시 객체는 생성 된 진술의 끝에서 자동으로 파괴됩니다. 그러나 생성자가 클래스 유형의 RValue를 반환하는 경우 합성 된 할당 연산자는 임시 객체의 수명을 연장 할 수 있습니다. 다음 코드에 대한 구문 설탕 :

y (1) .operator = (y (0));

Y& Y::operator=(const Y& other);
합성 할당 연산자 = 클래스 y의 경우 rvalue에 적용될 수 있습니다. 따라서 컴파일러는 제작자 y (1)에 의해 생성 된 임시 객체에 대한 할당으로 과제를 해석 할 수 있습니다. 이 합성 된 할당 연산자는 생성자가 생성 한 임시 객체의 수명을 연장하여 rvalues에 과제를 허용합니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3