可能重复:
C++ 命名空间问题
我见过几个没有命名空间的例子。这样做有什么好处?
::fn
指fn
在全局命名空间中调用的东西。
::fn
引用全局命名空间中的某些东西(它是一个绝对路径)。using <obj>;
请注意,您可以使用or将内容导入全局命名空间using namespace <name>
;
namespace::fn
引用相对于当前命名空间的命名空间中的某些东西(它是相对路径)。
namespace X
{
namespace Y
{
int Z()
{
N::fn();
// Compiler looks for
// ::X::Y::N::fn()
// ::X::N::fn()
// ::N::fn()
//
// The search is done in that order the first found
// is used. Note this is done at compile time only.
::fn(); // Absolute path. No search done.
// looks for `fn()` in the global namespace
fn(); // Relative path no namespace
// Searchs for ::X::Y::fn()
// ::X::fn()
// ::fn()
::X::fn(); // Absolute path no search done.
// looks for `fn()` in the namespace X which must be
// in the global namespace.
}
}
}
当您有两个具有此名称的变量时要使用::fn
,一个在函数内声明,另一个在全局范围内。因此,如果您想处理该函数内部的全局 fn(声明了局部 fn),则需要调用它::fn
以区分它们
int fn = 5;
int main (int argc, char *argv[])
{
int fn = 10;
std::cout << "local fn is " << fn << " global fn is " << ::fn;
return 0;
}