簡體   English   中英

語法:: function_name在c ++中的含義是什么?

[英]What does the syntax ::function_name mean in c++?

在名為::foo()的函數中,我不明白語法是什么。 如果它是foo::count_all()那么我知道count_all是類或名稱空間foo的函數。

::foo()的情況下,什么是::引用?

::運算符正在調用namespaceclass 在您的情況下,它調用全局命名空間,該命名空間不是命名空間。

下面的示例說明了名稱空間的重要性。 如果你只是打電話給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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM