首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ bitvec[0].flip()工作的原因

C++ bitvec[0].flip()工作的原因
EN

Stack Overflow用户
提问于 2010-11-24 13:36:34
回答 2查看 103关注 0票数 1

基于C++入门第四版(即,pp105),

代码语言:javascript
复制
bitset<32> bitvec;

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

我的问题是,为什么第二行行得通?基于

代码语言:javascript
复制
http://www.cplusplus.com/reference/stl/bitset/operator[]/

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

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

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-24 13:59:46

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

伪代码:

代码语言:javascript
复制
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实现的源代码。

票数 2
EN

Stack Overflow用户

发布于 2010-11-24 13:40:34

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

代码语言:javascript
复制
bitset<32> bs;
bitset<32>::reference first = bs[0];
first.flip();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4263779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档