为什么在C++;是否显式解析为全局命名空间? 我在C++中编写Windows COM,我看到很多函数都用“代码>::/COD>”前缀,从而调用全局命名空间版本。为什么呢
我知道可能会与名称空间发生冲突,但它是否经常发生在COM中,以至于每个人都变得如此偏执,以至于现在每个函数都必须显式解决 以下是我经常看到的一些例子:为什么在C++;是否显式解析为全局命名空间? 我在C++中编写Windows COM,我看到很多函数都用“代码>::/COD>”前缀,从而调用全局命名空间版本。为什么呢,com,namespaces,Com,Namespaces,我知道可能会与名称空间发生冲突,但它是否经常发生在COM中,以至于每个人都变得如此偏执,以至于现在每个函数都必须显式解决 以下是我经常看到的一些例子: wStrLen = ::SysAllocStringLen(NULL, wStr); ::SysFreeString(str); ::CoTaskMemFree(item); 还有很多其他的 这让我很困惑,为什么程序员选择显式解析名称空间,为什么他们不直接编写: wStrLen = SysAllocStringLen(NULL, wStr);
wStrLen = ::SysAllocStringLen(NULL, wStr);
::SysFreeString(str);
::CoTaskMemFree(item);
还有很多其他的
这让我很困惑,为什么程序员选择显式解析名称空间,为什么他们不直接编写:
wStrLen = SysAllocStringLen(NULL, wStr);
SysFreeString(str);
CoTaskMemFree(item);
有什么想法吗?没有,这在COM编程中并不常见,在我写过或研究过的任何编程中都不常见。COM本身向全局名称空间添加的名称很少,辅助函数也没有那么多。实现COM接口的一种常见方法是使用C++类,您可以将它粘贴到任何您喜欢的命名空间中,因为它在模块外不会被公开。我怀疑这只是您所看到的代码的团队更喜欢的东西。如果您在一本书中看到了它,那么这是一个很好的方法,可以增加书籍代码示例在没有太多麻烦的情况下进入现有程序的可能性。除此之外,它没有任何问题。没错,像这样的团队编码指南并不少见。不常与真正的问题联系在一起,只是“这就是我们做这件事的方式!”。可读性很重要,你必须遵循它们。