我正在学习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 ++。
答案 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
类不仅用作类,还用作命名空间。