小编典典

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

java

我最近完成了一堆Java编码,并且已经习惯了非常特定的包命名系统,例如使用深度嵌套com.company.project.db。在Java,AS3 /
Flex和C#中可以正常工作。我也看到了在C 中应用相同的范例,但是我也听说将C 名称空间视为与Java包的直接对应是很不好的。

是真的,为什么?名称空间/程序包有何相似之处和不同之处?如果您确实使用深层嵌套的名称空间,可能会看到哪些问题?


阅读 266

收藏
2020-12-03

共1个答案

小编典典

在C ++中,名称空间只是关于对可用名称进行分区。Java软件包与模块有关。命名层次结构只是它的一方面。

就本质而言,在C
++中使用深度嵌套的名称空间并没有什么错,除了它们通常不需要,因为它们背后没有模块系统,而且额外的层只会增加噪音。通常只有一个或两个级别的名称空间就足够了,而对于内部详细信息(通常称为“详细信息”)来说,则是额外的奇数级。

C ++命名空间还有一些额外的规则,如果使用过度,它们可能会吸引您-例如arguments-dependent-
lookup
,以及解析为父级的规则。WRT后者,取:

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

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

2020-12-03