Java package与C++ namespace的异同

Java的包与C++的名字空间基本上是一个类型的东西。

其相同点为划分作用域, 解决名字冲突的问题,方便项目的协作、集成。

其不同点有三:

其一,C++的名字空间可以修饰所有的标识符,类、结构、联合、枚举、变量等皆可,而Java的包只能修饰Java类。

其二,C++的名字空间可以嵌套,Java的包不支持嵌套。

其三,C++内层空间可以看到外层空间的各种标识符,相反则不可,如果有同名标识符,则内层空间自动屏蔽外层空间的同名标识符。而Java包内的类默认为package访问权限,同一个包内的类默认可以相互访问,而只有public修饰的类才可以被包外面的代码访问。