以下几行是等效的(从 c++17 开始):
namespace A { namespace B {} }
namespace A::B {}
下面的行有合格的等价物吗?
namespace A { namespace {} }
谢谢你
匿名命名空间(也称为未命名命名空间)成员占据全局范围,并且可以在文件中声明之后的所有范围中访问。我们无需任何资格即可访问它们。
如果您考虑以下计划:
#include <iostream>
// named namespace
namespace A {
// unnamed namespace
namespace {
int a;
}
}
int main(void) {
// initializing an unnamed namespace member
// you need to use `::` because that unnamed namespace
// is containing in a named namespace `A`
A::a = 10;
// calling the unnamed namespace member
std::cout << A::a << std::endl;
return 0;
}
您必须需要使用限定符
::
,即A::a
,如果您定义未命名的命名空间,则不再需要使用示例中给出的任何限定符:
// unnamed namespace
namespace {
int a;
}
int main(void) {
// simply accessed
a = 10;
}
不。没有语法可以使用单个
namespace
声明在另一个命名空间内创建匿名命名空间。