为什么在C ++中的类初始化之前使用范围运算符(::)?

时间:2015-01-23 07:53:05

标签: c++ class scope initialization

我有时会在初始化类范围operator ::之前看到,为什么在那里使用?

例如:

之间的区别是什么
  

HRESULT hRes = :: CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);

  

HRESULT hRes = CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);

2 个答案:

答案 0 :(得分:6)

::指的是全局命名空间。无论如何,你在那里找到了名字,因此通常不需要。

但是,您使用此原因有两个原因。非限定名称可能来自许多名称空间,并且存在非平凡的规则(例如依赖于参数的查找)以确定要按哪种顺序搜索哪些名称空间。仅在给定的命名空间中查找限定名称。

第二个原因是在类成员函数内部,首先在类范围中查找非限定名称,并且限定名称再次避免这种情况。

答案 1 :(得分:3)

它的含义如下:

HRESULT hRes = ::CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
The "CoInitializeEx" function uses the global scope // Not from local scope.

HRESULT hRes = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
The "CoInitializeEx" function uses the local Scope.