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

ton*_*nni 0 c++ scope initialization class

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

例如:有什么区别:

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

HRESULT hRes = CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);

MSa*_*ers 6

::指的是全局命名空间.无论如何,你会在那里找到名字,所以通常不需要.

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

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