2010-11-24 34 views
1

基于C++引物第4版(即第105),C++为什么bitvec [0] .flip()的工作

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); 

bitset :: flit如何在bool或引用上使用?

谢谢

回答

2

operator []返回的“reference”不是C++引用,它是一个具有flip()方法的特殊代理类。

伪代码:有关详情,请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

它返回的bitset<32>::reference一个实例,其中有一个flip方法。更明确地说:

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

您可以给我一点详细信息如何bitset <32> ::引用工作,或者你可以给我一些链接,我可以得到更多的信息 - 谢谢 – q0987 2010-11-24 05:43:09