类名后的双冒号(声明) - 这是什么意思?

时间:2017-05-09 13:49:12

标签: c++

我一直想知道以下内容是什么意思(从cppreference pimpl获取的代码段)

class widget::impl {
      ^^^^^^^^^^^^

   ...
};

a_class::another_class是什么意思?这是名称空间吗?或者是一个内部类声明为主要类?

4 个答案:

答案 0 :(得分:4)

  

或者是一个内部类声明为主类外的吗?

宾果。要非常清楚,iit实际上是封闭类之外的内部类定义

如果您希望类具有类似成员的类访问作为实现细节,但又不希望将该嵌套类的定义发布到您的类的客户端,那么这是一个方便的技巧。< / p>

答案 1 :(得分:3)

::运算符是scope resolution operator。它限定了表达式的范围。在您的情况下,它使用范围class impl限定表达式widget,表示属于impl的类widget。请考虑以下示例,该示例在不同的范围定义两个impl类:

// global impl
class impl;

class widget
{
    // widget's impl
    class impl;
};

class widget::impl
{
    // Define widget's impl
};

class impl
{
    // Define global impl
};

范围解析运算符允许您清楚地声明要定义的类。

答案 2 :(得分:1)

这是一个内部阶级。

 class Widget
  {
    // ...

  private:
    class impl;           

  };

  // Then, typically in a separate implementation file:
  class Widget::impl
  {
  public:
    // ...
    T1 t1_;
    T2 t2_;
  };

答案 3 :(得分:0)

可以是内部类别的前向声明的声明,例如:

class A{
 class B;

};

class A::B {

};
相关问题