语法:: function_name在c ++中的含义是什么?

时间:2017-12-22 04:08:18

标签: c++ visual-c++

在名为::foo()的函数中,我不明白语法是什么。 如果是foo::count_all(),那么我知道count_all是类或命名空间foo的函数。

如果::foo() ::引用是什么?

4 个答案:

答案 0 :(得分:4)

::运营商正在呼叫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 
}

答案 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;
}