【问题标题】:Does ::myFunction() belongs to global namespace?::myFunction() 是否属于全局命名空间?
【发布时间】:2016-12-01 21:49:18
【问题描述】:

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

【问题讨论】:

标签: c++ function scope namespaces


【解决方案1】:

如果代码编译,那么是的,::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();

【讨论】:

  • @Leon,是的,已修复。
【解决方案2】:

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

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

struct S {
  int i;
};

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

  S a;
  ::S b;

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

【讨论】:

  • 查看type_traitsdecltype 以绕过具有相同大小的类型。例如:static_assert(std::is_same<decltype(a),decltype(b)>::value, "should be different types");
猜你喜欢
  • 2014-09-27
  • 2015-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-03
  • 2013-11-22
  • 1970-01-01
相关资源
最近更新 更多