C ++:class classname :: reference {...}

时间:2011-10-26 06:17:41

标签: c++ stl reference

我正在学习stl,从未见过像class classname :: reference {}

这样的课程

我在网上搜索但可以获得很好的信息..

class bitset::reference {
  friend class bitset;
  reference();                                 // no public constructor
public:
  ~reference();
  operator bool () const;                      // convert to bool
  reference& operator= ( bool x );             // assign from bool
  reference& operator= ( const reference& x ); // assign from bit
  reference& flip();                           // flip bit value
  bool operator~() const;                      // return inverse value
};
  • 这是什么::这里的参考?

我在这里看到这段代码[在这里输入链接描述] [1] http://www.cplusplus.com/reference/stl/bitset/ 我以前一直在使用c ++。

4 个答案:

答案 0 :(得分:2)

您是否看过bitset类定义?在某个地方有类似的东西:

template<size_t _Bits>
class bitset
{
    ...
    class reference;
    ...
}

这就像把一个功能的身体放在课堂体外。现在我们将嵌套类的主体放在父类之外:

class bitset::reference
{
    /* class body */
}

顺便说一句,在MSVC(C:\Program Files\Microsoft Visual Studio 9.0\VC\include\bitset)中,它们实际上是在彼此内部定义的:

// TEMPLATE CLASS bitset
template<size_t _Bits>
class bitset
{   // store fixed-length sequence of Boolean elements
typedef unsigned long _Ty;  // base type for a storage word
enum {digits = _Bits};  // extension: compile-time size()

public:
typedef bool element_type;  // retained

    // CLASS reference
class reference
    {   // proxy for an element
    friend class bitset<_Bits>;
    .
    .
    .

g ++的bitset.h也是如此,虽然有点复杂。

答案 1 :(得分:1)

引用是类名,没什么特别的。 bitset :: reference表示引用是内部类。

答案 2 :(得分:1)

您引用的代码段前面的行说明:

  

因为在大多数C ++环境中不存在这样的小元素类型,所以单个元素作为特殊引用访问,模仿bool元素

C ++不允许引用位域,因此reference类用于模拟它。

答案 3 :(得分:1)

这是nested class。来自文章:

  

可以在另一个类的范围内声明一个类。这样的   class被称为“嵌套类”。嵌套类被认为是   在封闭类的范围内,可以使用   在该范围内。从不同于的范围引用嵌套类   它的直接封闭范围,您必须使用完全限定的名称。

另一种解释是bitset类不仅用作类,还用作命名空间。