我在一个类中发现了这一行代码,我必须修改:

::Configuration * tmpCo = m_configurationDB;//pointer to current db

我不知道类名前的双冒号是什么意思。如果没有,我会读到:声明tmpCo作为类Configuration对象的指针…但是前面的双冒号把我弄糊涂了。

我还发现:

typedef ::config::set ConfigSet;

当前回答

::用于将某些东西(变量、函数、类、类型定义等)链接到名称空间或类。

如果在::之前没有左边,那么它强调了您正在使用全局名称空间的事实。

例如:

::d oMyGlobalFunction();

其他回答

::用于将某些东西(变量、函数、类、类型定义等)链接到名称空间或类。

如果在::之前没有左边,那么它强调了您正在使用全局名称空间的事实。

例如:

::d oMyGlobalFunction();

一个隐藏的全局名称可以使用作用域解析操作符引用:: 例如;

int x;
void f2()
{
   int x = 1; // hide global x
   ::x = 2; // assign to global x
   x = 2; // assign to local x
   // ...
}

这确保解析是从全局名称空间进行的,而不是从您当前所在的名称空间开始。例如,如果你有两个不同的类叫做Configuration:

class Configuration; // class 1, in global namespace
namespace MyApp
{
    class Configuration; // class 2, different from class 1
    function blah()
    {
        // resolves to MyApp::Configuration, class 2
        Configuration::doStuff(...) 
        // resolves to top-level Configuration, class 1
        ::Configuration::doStuff(...)
    }
}

基本上,它允许您遍历全局名称空间,因为您的名称可能会被另一个名称空间(在本例中是MyApp)中的新定义所破坏。

"::"表示范围解析运算符。 具有相同名称的函数/方法可以定义在两个不同的类中。要访问特定类的方法,使用范围解析运算符。

运算符被称为作用域解析运算符,它的作用就是解析作用域。因此,通过在type-name前面加上this,它告诉编译器在全局命名空间中查找类型。

例子:

int count = 0;

int main(void) {
  int count = 0;
  ::count = 1;  // set global count to 1
  count = 2;    // set local count to 2
  return 0;
}