【发布时间】:2015-10-22 03:56:14
【问题描述】:
我正在阅读 Scott Meyrse C++,现在我正在阅读关于封装的部分。他说,除非将数据成员声明为私有,否则无法封装数据成员。这很清楚。
但由于我来自 Java 并拥有其 package-private 方法和成员,我感兴趣的是 C++ 是否允许我们做一些技巧来在命名空间中声明一些,以便在外部无法访问命名空间。命名空间私有或类似的东西。我认为使用匿名命名空间的以下代码会很好:
namespace A {
namespace { //anonymous namespace within the namespace
int a;
}
void foo(){ std::cout << a << std::endl; }
}
int main()
{
A::a = 2;
A::foo();
}
【问题讨论】:
-
一个常见的约定是有一个名为
internal的嵌套命名空间。它仍然可以访问——任何人都可以写A::internal::a——但它清楚地向外部的任何人发出信号,他们将要依赖内部实现细节,这将是危险的。未命名的命名空间做了一些完全不同的事情 - 它包含仅限于此翻译单元(又名源文件)的定义。 -
@IgorTandetnik 确实,听起来很合理。非常感谢您的建议。
标签: java c++ namespaces