:: myFunction()是否属于全局命名空间?

时间:2016-07-27 18:22:45

标签: c++ function scope namespaces

我知道在C ++中,我们使用::来限定变量或函数的命名空间,例如myNamespace::a。但我注意到一些像::myFunction()这样的用法。这是否意味着该函数属于全局命名空间?

2 个答案:

答案 0 :(得分:3)

如果代码编译,则是,::myFunction()引用myFunction的全局声明。

当本地定义影响您的全局定义时,这种情况最常用:

namespace local {
    int myFunction() {}; // local namespace definition
};
int myFunction() {}; // global definition.
using namespace local;

int main() {
    // myFunction(); // ambiguous two definitions of myFunction in current scope.
    local::myFunction(); // uses local::myFunction();
    ::myFunction(); // uses global myfunction();

答案 1 :(得分:3)

是的,这意味着它后面的变量,类型或函数必须在全局命名空间中可用。

例如,当某些内容被本地定义遮蔽时,可以使用它:

struct S {
  int i;
};

void f() {
  struct S {
    double d;
  };

  S a;
  ::S b;

  static_assert(sizeof(a) != sizeof(b), "should be different types");
}