当前位置: 首页 > 面试题库 >

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

何长恨
2023-03-14
问题内容

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

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


问题答案:

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

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

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

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

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



 类似资料:
  • 本文向大家介绍C#命名空间与java包的区别分析,包括了C#命名空间与java包的区别分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了C#命名空间与java包的区别。分享给大家供大家参考。具体分析如下: 相同点: 1、都是为了重用性(reusebility)——软件工程中一个非常重要的目标。 2、C#里面的命名空间和java中的包都属于访问权限的控制机制。 不同点: 1、C#命名空间只

  • 问题内容: 命名空间Python程序包(no )和常规Python程序包(具有)之间有什么区别,尤其是对于常规程序包为空时? 我很好奇,因为最近我一直忘了自己制作的包装,而且我从没发现任何问题。实际上,它们的行为似乎与常规软件包相同。 编辑:命名空间包仅受Python 3.3支持(请参阅PEP 420 ),因此自然地,此问题仅适用于Python 3。 问题答案: 阅读Aaron和PEP420的链接

  • 主要内容:定义命名空间,using关键字,命名空间嵌套在 C# 中,可以将命名空间看作是一个范围,用来标注命名空间中成员的归属,一个命名空间中类与另一个命名空间中同名的类互不冲突,但在同一个命名空间中类的名称必须是唯一的。 举个简单的例子,在一个简单的 C# 程序中,假如我们要输出某些数据,就需要使用 ,其中 System 就是命名空间,而 Console 是类的名字,WriteLine 则是具体要使用方法。也就是说,如果要访问某个命名空间中的类,我

  • 一个中大型软件往往由多名程序员共同开发,会使用大量的变量和函数,不可避免地会出现变量或函数的命名冲突。当所有人的代码都测试通过,没有问题时,将它们结合到一起就有可能会出现命名冲突。 例如小李和小韩都参与了一个文件管理系统的开发,它们都定义了一个全局变量 fp,用来指明当前打开的文件,将他们的代码整合在一起编译时,很明显编译器会提示 fp 重复定义(Redefinition)错误。 为了解决合作开发

  • 假设这样一种情况,当一个班上有两个名叫 Zara 的学生时,为了明确区分它们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的家庭住址,或者他们父母的名字等等。 同样的情况也出现在 C++ 应用程序中。例如,您可能会写一个名为 xyz() 的函数,在另一个可用的库中也存在一个相同的函数 xyz()。这样,编译器就无法判断您所使用的是哪一个 xyz() 函数。 因此,引入了命名空间这个概念,

  • 问题内容: C#中的名称空间与Java中的程序包有什么区别(在使用方面)? 问题答案: 来自:http : //www.javacamp.org/javavscsharp/namespace.html 包用于组织文件或公共类型,以避免类型冲突。包构造可以映射到文件系统。 可以替换: 软件包没有别名。您必须使用import语句或标准名称来提及特定类型。 要么 另一个源文件: 程序包不能嵌套。一个源文