它意味着全球范围。如果在同一范围内存在冲突的函数或变量,并且需要使用全局函数或变量,则可能需要使用此运算符。你可能有类似的东西:void bar(); // this is a global functionclass foo { void some_func() { ::bar(); } // this function is calling the global bar() and not the class version void bar(); // this is a class member};如果需要从类成员函数中调用全局bar()函数,则应使用:: bar()来获取函数的全局版本。
在全局命名空间中查找以范围解析运算符(::)开头的名称。我们可以通过查看草案C ++标准部分的3.4.3 合格名称查找第4段来看到这一点(强调我的):在全局范围内,在使用它的转换单元中查找以一元范围运算符::(5.1)为前缀的名称。该名称应在全局命名空间范围内声明,或者是一个名称,其声明在全局范围内可见,因为using-directive(3.4.3.2)。使用:: 允许引用全局名称,即使其标识符已被隐藏(3.3.10)。作为标准状态,这允许我们使用否则将被隐藏的全局命名空间中的名称,链接文档中的示例如下所示: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;}措辞非常相似,可以追溯到N1804,这是最早的标准草案。