[英]What does the syntax ::function_name mean in c++?
在名為::foo()
的函數中,我不明白語法是什么。 如果它是foo::count_all()
那么我知道count_all
是類或名稱空間foo
的函數。
在::foo()
的情況下,什么是::
引用?
::
運算符正在調用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
}
::
之前沒有任何內容表示全局命名空間。 例如:
int foo(); // A global function declaration
int main() {
::foo(); // Calling foo from the global namespace.
...
它是對全局范圍內的函數foo()的函數調用,而不是聲明。 函數名前面的::表示你明確想要從一些較窄的范圍調用全局函數foo(),而不是其他版本的foo()。
例如
void foo()
{
printf("global foo\n");
}
namespace bar
{
void foo()
{
printf("bar::foo\n");
}
void test()
{
foo();
::foo();
}
}
調用bar :: test()將打印出來:
bar::foo
global foo
通過指定::您告訴系統查看全局命名空間。 另見本文
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.