我正在阅读 Scott Meyrse C++,现在正在阅读有关封装的部分。他说除非将数据成员声明为私有(private),否则无法封装数据成员。这很清楚。
但由于我来自 Java 并拥有它的 package-private
方法和成员,我感兴趣的是 C++ 是否允许我们做一些技巧来在命名空间,以便在命名空间之外无法访问它。命名空间私有(private)或类似的东西。我认为使用匿名命名空间的以下代码会很好:
namespace A {
namespace { //anonymous namespace within the namespace
int a;
}
void foo(){ std::cout << a << std::endl; }
}
int main()
{
A::a = 2;
A::foo();
}
最佳答案
I'm interested in if C++ allows us to do some tricks to declare some in a namespace so that it's inaccessible outside of the namespace.
你不能有一个 private 命名空间,在其中 C++ 语言本身会强制执行其隐私,并以与私有(private)成员相同的方式使外界无法访问它。
如果有的话,它必须通过在特定代码库中采用一致的命名约定来完成。
这在某种程度上类似于 Python 方法名称以前导下划线 _
为前缀作为约定来指示该方法(或数据成员)被认为是“私有(private)的”并且应该' 可以从外部访问。
关于java - C++ 中的命名空间私有(private)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33273168/