2017-12-19 9 views
0

C++의 데이터 구조 및 알고리즘 4th Edition, Adam Drozdek 저서를 읽었으며 다음 코드를 발견했습니다. 제 질문은 콜론이 unsigned int successor : 1;에서 무엇을하는지입니다. 콜론이 successor을 1 비트 만 사용한다고 대답했습니다. 그러나 부울 변수는 변수의 주소 지정이 가능해야하기 때문에 바이트의 배수를 차지한다는 것을 알고 있습니다. successor이 1 비트 만 사용하는 경우 어떻게 주소 지정이 가능합니까?다음 C++ 코드에서 콜론은 무엇입니까?

template<class T> 
class ThreadedNode { 
    public: 
     ThreadedNode() { 
      left = right = 0; 
     } 
     ThreadedNode(const T& e, ThreadedNode *l = 0, ThreadedNode *r = 0) { 
      el = e; left = l; right = r; successor = 0; 
     } 
     T el; 
     ThreadedNode *left, *right; 
     unsigned int successor : 1; 
}; 
+2

누군가는 그들이 무엇을하고 있는지 전혀 몰랐습니다. 이 장소의 비트 필드는 절대 쓸모가 없습니다. – SergeyA

답변

1

이것은 Bit Field으로 알려져 있습니다. unsigned int successor : 1;이라는 표현식은 successor이라는 이름의 unsigned int이 1 비트만을 사용한다고 선언합니다.

지정된 비트보다 많은 비트를 사용해야하는 방식으로 비트 필드를 사용하는 동작은 구현 정의 동작입니다. 비트 필드에 대한 포인터 또는 비 const 참조를 얻는 것도 불가능합니다. 왜냐하면 반드시 바이트의 시작 부분에서 시작하지 않기 때문입니다.

비트 필드를 사용하면 호환 비트 필드를 함께 포장하여 컴파일러가 유형의 크기를 줄일 수 있습니다. 비트 필드는 크기 축소 측면에서 구속력이없고 컴파일러에게만 기회입니다.