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