java - C++ 中的命名空间私有(private)成员

标签 java c++ namespaces

我正在阅读 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();
}

但它运行良好:http://coliru.stacked-crooked.com/a/b4690b9bb28dad29

最佳答案

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/

相关文章:

java - 如何使用java中的 map 列出具有特定主题的每条消息?

c++ - 在 C++ 中使用表示变量名称的字符串访问变量值

typescript - 如何在Typescript中将类和接口(interface)分离到同一命名空间下的单独文件中

Javascript 并从另一个引用一个命名空间属性

java - POI : setCellType(Cell. CELL_TYPE_FORMULA) 由于 Cell.CELL_TYPE_ERROR 而失败

java - 添加到集合时 PreUpdate 不触发

java - 哪种编程练习更快?

c++ - 仅 Debug模式下的 FFMPEG 异常

c++ - 什么是模板推导指南,何时应使用它们?

python - 如何创建 Python 命名空间(argparse.parse_args 值)?