在名为::foo()
的函数中,我不明白语法是什么。
如果是foo::count_all()
,那么我知道count_all
是类或命名空间foo
的函数。
如果::foo()
::
引用是什么?
答案 0 :(得分:4)
::
运营商正在呼叫namespace
或class
。在你的情况下,它调用的是全局命名空间,它不是命名命名空间中的所有内容。
下面的示例说明了名称空间重要的原因。如果您只是致电foo()
,则无法解决您的通话,因为有2 foo
秒。您需要使用::foo()
来解析全局问题。
namespace Hidden {
int foo();
}
int foo();
using namespace Hidden; // This makes calls to just foo ambiguous.
int main() {
::foo(); // Call to the global foo
hidden::foo(); // Call to the foo in namespace hidden
}
答案 1 :(得分:2)
::
之前没有任何内容表示全局命名空间。例如:
int foo(); // A global function declaration
int main() {
::foo(); // Calling foo from the global namespace.
...
答案 2 :(得分:1)
它是全局范围内函数foo()的函数调用,而不是声明。函数名前面的::表示你明确想要从一些较窄的范围调用全局函数foo(),而不是其他版本的foo()。
E.g。
void foo()
{
printf("global foo\n");
}
namespace bar
{
void foo()
{
printf("bar::foo\n");
}
void test()
{
foo();
::foo();
}
}
对bar :: test()的调用将打印出来:
bar::foo
global foo
答案 3 :(得分:0)
通过指定::你告诉系统查看全局命名空间。另见本文
https://stackoverflow.com/a/6790112/249492
以下是@CharlesBailey的一个例子,我们在" nest"命名空间。您可以访问" x"可以更改为上部命名空间,具体取决于您是否指定使用全局命名空间。
namespace layer {
namespace module {
int x;
}
}
namespace nest {
namespace layer {
namespace module {
int x;
}
}
using namespace /*::*/layer::module;
}