Rvalue 할당: 왜, 어떻게?
클래스 유형의 반환 값(rvalue)에 할당이 가능한 이유는 무엇입니까? 일반적으로 rvalue는 메모리 주소가 없는 임시 항목으로 간주됩니다. 그러면 어떻게 왼쪽 값(lvalues)으로 사용할 수 있습니까?
다음의 난해한 코드를 생각해 보세요.
class Y { public : explicit Y(size_t num = 0) {} }; int main() { Y(1) = Y(0); // WHAT?!? return 0; }
이 코드는 비논리적으로 보일 수도 있지만 오류 없이 컴파일됩니다. 그 이유를 이해하려면 할당 연산자 이면의 메커니즘을 자세히 조사해야 합니다.
합성 할당 연산자
클래스가 할당 연산자를 명시적으로 정의하지 않으면 컴파일러는 자동으로 하나를 생성합니다. 합성 연산자는 다음 두 가지 형식 중 하나를 취할 수 있습니다.
후자의 형식은 rvalue에 적용되기 때문에 주목할 만합니다. 따라서 위의 예에서 컴파일러는 생성자 Y(1)에서 반환된 rvalue를 허용할 수 있는 할당 연산자를 생성합니다.
Rvalue에 대한 할당 방지
If rvalue에 대한 할당을 금지하려면 ref-qualifier를 사용하여 할당 연산자를 명시적으로 선언하면 됩니다. 이런 방식으로 연산자가 lvalue만 허용하도록 제한할 수 있습니다. 예를 들면 다음과 같습니다.
class Y { public : explicit Y(std::size_t num = 0); Y& operator=(Y const&) & = default; };
ref 한정자 &를 사용하면 합성 할당 연산자가 lvalue에만 사용 가능하도록 할 수 있습니다.
위 내용은 Rvalue에 할당: 금지됨 또는 기능? 반환 값을 할당할 수 있는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!