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

Dea*_*ean 5 c++

我一直想知道下面的意思是什么(摘录自cppreference pimpl

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

   ...
};
Run Code Online (Sandbox Code Playgroud)

什么a_class::another_class意思 那是一个名称空间吗?还是内部类被声明为不在主要类之外?

Rei*_*ica 5

或者这是一个在主类之外声明的内部类?

答对了。非常清楚的是,它实际上是在封闭类外部定义的内部类。

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


Fra*_*eux 5

::运算符是范围解析运算符。它限定表达式的范围。class impl在您的情况下,它用范围限定表达式,这意味着属于 的widget类。考虑以下示例,它在不同范围定义了两个类:implwidgetimpl

// global impl
class impl;

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

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

class impl
{
    // Define global impl
};
Run Code Online (Sandbox Code Playgroud)

范围解析运算符允许您清楚地声明您正在定义哪个类。