可能重复:
C++ namespace question
我见过几个没有命名空间的例子。这有什么好处?
答案 0 :(得分:8)
::fn
指的是全局命名空间中名为fn
的内容。
答案 1 :(得分:5)
::fn
引用全局命名空间中的某些内容(它是绝对路径)。请注意,您可以使用using <obj>;
或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.
}
}
}
答案 2 :(得分:2)
如果有两个具有此名称的变量,一个在函数内部声明,另一个在全局范围内声明,则要使用::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;
}