C++ 作用域运算符(:)在类名中的作用

C++ 作用域运算符(:)在类名中的作用,c++,class,C++,Class,我发现下面的类声明很难理解: class App::Impl 类名现在是App::Impl吗?范围操作符::< /COD>在类名中做什么?< /P> < P> C++ >代码>::/COD> >。它用于告诉编译器某个东西属于什么或类 在这种情况下, APP:IMPL< /COD>告诉编译器你正在谈论的是 IMPL,属于 App。 < P> > C++ ::它用于告诉编译器某个东西属于什么或类 在本例中,App::Impl告诉编译器您正在谈论的Impl属于AppApp是您称为Impl的类的名称空

我发现下面的类声明很难理解:

class App::Impl

类名现在是App::Impl吗?范围操作符<代码>::< /COD>在类名中做什么?< /P> < P> C++ >代码>::/COD> >。它用于告诉编译器某个东西属于什么或类


在这种情况下,<代码> APP:IMPL< /COD>告诉编译器你正在谈论的是<代码> IMPL<代码>,属于<代码> App。

< P> > C++ <代码>::它用于告诉编译器某个东西属于什么或类


在本例中,
App::Impl
告诉编译器您正在谈论的
Impl
属于
App

App是您称为Impl的类的名称空间,可以在更多不同的名称空间中定义

App是您调用的Impl类的名称空间,可以在更多不同的名称空间中定义

范围解析运算符(:)用于标识和指定标识符所引用的上下文。因此这里
App
指的是类
Impl
所属的名称空间。通过在不同的名称空间中对不同的类进行子作用域,我们可以使它们具有相同的名称。在这种情况下,我们需要指定类的名称空间

namespace X{
    class Name {}; 
} 
namespace Y{
    class Name {}; 
}

这里我们可以使用
X::Name
Y::Name

范围解析运算符(::)来标识和指定标识符所引用的上下文。因此这里
App
指的是类
Impl
所属的名称空间。通过在不同的名称空间中对不同的类进行子作用域,我们可以使它们具有相同的名称。在这种情况下,我们需要指定类的名称空间

namespace X{
    class Name {}; 
} 
namespace Y{
    class Name {}; 
}

在这里,我们可以使用
X::Name
Y::Name

它被命名为
指向实现的指针
,有关更多详细信息,请参阅。这只是声明类
Impl
存在于命名空间
App
中。它不是定义类,但是如果您只需要使用指向它的引用或指针,就可以了。你可以用短语“forward declaration”来搜索这个问题。@Cid FWIW,这对我来说也是一个不错的问题(当然,我没有投反对票)。@hvd我同意这是一个不错的问题,好吧,他可能做了一些搜索来找出类声明中的
是什么,但是,至少他没有要求我们为他写代码。他只是需要一些解释而已。不是downvote,而是downvote按钮,用于回答“没有用处、不清楚或缺乏研究成果”的问题。。。我猜在这种情况下,人们缺乏研究努力。它被命名为
指向实现的指针
,有关更多详细信息,请参阅。这只是声明类
Impl
存在于命名空间
应用程序
中。它不是定义类,但是如果您只需要使用指向它的引用或指针,就可以了。你可以用短语“forward declaration”来搜索这个问题。@Cid FWIW,这对我来说也是一个不错的问题(当然,我没有投反对票)。@hvd我同意这是一个不错的问题,好吧,他可能做了一些搜索来找出类声明中的
是什么,但是,至少他没有要求我们为他写代码。他只是需要一些解释而已。不是downvote,而是downvote按钮,用于回答“没有用处、不清楚或缺乏研究成果”的问题。。。我想,在这种情况下,人们缺乏研究努力。