java - C++ 命名空间,与 Java 包的比较

标签 java c++ namespaces package

我最近完成了一堆 Java 编码,并且已经习惯了非常具体的包命名系统,例如深度嵌套。 com.company.project.db。这在 Java、AS3/Flex 和 C# 中运行良好。我也看到在 C++ 中应用了相同的范例,但我也听说将 C++ 命名空间视为 Java 包的直接对应物是不好的。

这是真的吗,为什么?命名空间/包有什么相似之处和不同之处?如果您使用深度嵌套的命名空间,可能会出现什么问题?

最佳答案

在 C++ 中,命名空间只是对可用名称进行分区。 Java 包是关于模块的。命名层次只是其中一个方面。

C++ 中深度嵌套的命名空间本身并没有什么问题,只是它们通常不是必需的,因为它们背后没有模块系统,而且额外的层只会增加噪音。 通常有一层或两层命名空间就足够了,还有一些奇怪的额外层用于内部细节(通常称为细节)。

C++ 命名空间还有一些额外的规则,如果过度使用这些规则可能会发现你 - 例如 argument-dependent-lookup ,以及围绕解决父级别的规则。 WRT 后者,采取:

namespace a{ namespace b{ int x; } }
namespace b{ string x; }
namespace a
{
  b::x = 42;
}

这合法吗?发生了什么很明显吗? 您需要知道命名空间解析的优先级才能回答这些问题。

关于java - C++ 命名空间,与 Java 包的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2108172/

相关文章:

java - Spring配置无法扩展属性

c++ - 无模式对话框中的 MFC C++ 显示模式对话框

安卓 OGLES 2 : shaders pointer for color

c# - 命名空间与 WCF 的相似名称混淆

php - laravel 如何在不包含类的情况下扩展类

java - 使用内存中的 PostgreSQL

java mysql SSL 连接

java - 使用 MethodDelegation 实现环绕通知

c++ - 类变量是否包含在 7 +- 2 准则中?

xslt - xsl : template and namespaces