通常,::any_name
和any_name
should be clear之间存在差异。如果前面有::
,则名称始终只在全局名称空间中查找。
我想知道是否存在技术(*)差异,给定名称空间,我已经知道 toplevel (即直接在全局命名空间下面)和我知道没有同名的第二个(嵌套)命名空间(或任何名称)。
例如,使用::std::string
与std::string
之间有什么区别吗?
(*)可读性,风格和维护问题放在一边。
答案 0 :(得分:3)
"例如,使用:: std :: string与std :: string之间有什么区别吗?"
想想这种奇怪的情况
LegacyString.hpp
namespace Legacy {
namespace std {
class string {
// ...
};
}
}
#include <string>
#include "LegacyString.hpp"
using namespace Legacy;
在这种情况下,如果您在以下代码中说::std::string
或std::string
,肯定会有所不同。
是的,正如您other question's accepted answer中所述,命名任何构造都是完全合法的,无论是namespace
,class
,struct
,{ {1}}等 typedef
。
至于您的问题编辑:
&#34;我知道没有同名的第二个(嵌套)命名空间(或任何名称)。&#34;
如果您知道这种情况,那么这两种形式当然是等同的。正如您所提到的,名称空间的解析最终会在全局级别进行,并且会在没有前缀std
的情况下正确解析它。
恕我直言,通常我们依赖,至少没有人那么愚蠢,实际命名任何构造::
。但引用爱因斯坦:
&#34;两件事是无限的:宇宙和人类的愚蠢;而且我对宇宙不确定。&#34;