2010-11-24 2 views
1

++ 입문 4 판 (즉, PP 105),C++ 이유 bitvec [0] .flip() 작동 C를 기반으로

bitset<32> bitvec; 

bitvec[0].flip(); // reverses the first bit. 

두 번째 줄 작동 왜 내 질문은?

http://www.cplusplus.com/reference/stl/bitset/operator[]/ 

    bool operator[] (size_t pos) const; 
reference operator[] (size_t pos); 

을 바탕으로 플릿은 부울 또는 참조에 사용할 수있는 방법을 비트 세트 수 있습니다 :?

답변

2

"참조"[]는 C++ 참조 아니라, 플립() 메소드가 특정 프록시 클래스이다.

의사 코드 : 자세한 내용은 STL 구현의

class bitset 
{ 
    class reference 
    { 
    public: 
     reference& flip() 
     { 
     bitset_.flip(pos_); 
     return *this; 
     } 

     reference(bitset& obj) 
     : bitset_(obj), pos_(pos) 
     { 
     } 

    bitset& bitset_; 
    size_t pos_; 
    }; 

    reference operator[](size_t pos) 
    { 
     return reference(*this, pos); 
    } 
} 

페이지의 소스 코드.

2

그것은 flip 방법이있다 bitset<32>::reference의 인스턴스를 돌려드립니다. 더 명시 : 오퍼레이터에 의해 반환

bitset<32> bs; 
bitset<32>::reference first = bs[0]; 
first.flip(); 
+1

작은 비트셋 <32> :: 참조가 작동하는지 또는 더 많은 정보를 얻을 수있는 링크를 제공 할 수 있습니다. 감사합니다. – q0987

+0

SGI의 [docs] (http : // www.sgi.com/tech/stl/bitset.html). 그들은 "하나의 비트에 대한 참조로 작동하는 프록시 클래스"라고 지적합니다. –

관련 문제