c++ union 예제

예를 들어 색상 데이터를 4개의 8비트 서명되지 않은 문자 번호로 저장해야 합니다. 동시에 이 색상 데이터를 32비트 서명되지 않은 정수 하나로 저장해야 합니다. Union을 사용하면 동일한 컴퓨터 메모리 블록을 사용하여 두 표현(서명되지 않은 char 4개 및 서명되지 않은 정수 가 있는 구조체)을 동시에 사용할 수 있습니다. 2. 구조는 모든 멤버에 대해 서로 다른 메모리 위치를 할당하고 공용 구조는 모든 멤버에 공통 메모리 위치를 할당합니다. 노조가 차지하는 메모리는 가장 큰 조합원을 보유할 수 있을 만큼 커질 것입니다. 공용 멤버만 가질 수 있습니다. 익명 공용 구조체의 개인 및 보호된 멤버는 오류를 생성합니다. 공용 구조체는 한 번에 한 번에 한 번만 저장할 수 있으므로 메모리를 절약할 수 있습니다. 노조는 가장 큰 유형만큼 커질 것입니다. 노조는 가장 큰 데이터 멤버를 보유하는 데 필요한 만큼만 큽이 큽잡됩니다.

다른 데이터 멤버는 해당 가장 큰 멤버의 일부와 동일한 바이트로 할당됩니다. 해당 할당의 세부 정보는 구현 정의이며 가장 최근에 작성되지 않은 공용 구조의 구성원에서 읽는 정의되지 않은 동작입니다. 많은 컴파일러는 비표준 언어 확장으로 공용 구조의 비활성 멤버를 읽을 수 있는 기능을 구현합니다. 공용 구조체의 멤버가 사용자 정의 생성자 및 소멸자가 있는 클래스인 경우 active member를 전환하려면 명시적 소멸자 및 배치 새 항목이 일반적으로 필요합니다. 조합원의 수명은 구성원이 활성화될 때 시작됩니다. 이전에 다른 멤버가 활성 상태인 경우 해당 구성원의 수명이 종료됩니다. NumericType 조합은 다음 그림과 같이 개념적으로 메모리에 정렬됩니다. typedef 및 C++ 초기화자를 사용하는 동일한 예: 이 공용 구조체를 사용하여 다른 바이트를 방해하지 않고 Item의 하위 순서 또는 고차 바이트를 수정할 수 있습니다. 이 키워드는 공용 구조체(또는 구조체 또는 클래스)의 비정적 멤버 함수 내에서만 액세스할 수 있는 암시적으로 생성된 포인터이며 멤버 함수가 호출되는 개체를 가리킵니다. 정적 멤버 함수에서는 이 포인터를 사용할 수 없습니다. 이 내용은 공용 구조체를 도입할 때 클래스에 대한 섹션에 보다 심층적인 분석이 제공될 때 다시 설명됩니다.