基于C ++ Primer第4版(即第105页),
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 );
如何在bool或reference上使用bitset :: flit?
谢谢
答案 0 :(得分:2)
它返回bitset<32>::reference
的实例,该实例具有flip
方法。更明确地说:
bitset<32> bs;
bitset<32>::reference first = bs[0];
first.flip();
答案 1 :(得分:2)
“reference”不是C ++引用,它是一个具有flip()方法的特殊代理类。
伪代码:
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);
}
}
有关详细信息,请参阅STL实现的源代码。