我观察到,在C++中,很少使用命名空间,而在.Net中它很常见.这有什么特别的原因吗?
另外我想知道其他人是否看到过在C++中常用的命名空间.
编辑:其实我指的是自定义应用程序而不是标准库,如STL或任何其他东西.
在C++中,名称空间在初始实现后的某个时间被添加到语言中,因此有许多应用程序代码没有使用它们.因此,由于它们的后期添加,所有标准库都被放入一个命名空间中.因此,using namespace std;
如果您愿意,只需简单地忽略命名空间即可.
另一方面,在C#中,名称空间从一开始就涉及到,并且库被大量分配.此外,每个人都使用它来创建初始代码,默认情况下将类放入命名空间.这迫使人们更加了解命名空间.
C++中的命名空间完全不同于.Net,ActionScript和Java(它们具有相同的概念).它们根本不是同一个概念.
在C++中,命名空间主要用于允许在命名上下文(命名空间)中封装几种类型和函数.它只涉及命名和访问名称.
在.Net,ActionScript和Java中,名称空间更多地是关于模块而不是名称.它们强制开发人员将他的代码组织在不同的命名空间中,每个命名空间都有一个目的,即上下文.由于这些语言是动态的(而不是像C++那样的静态),名称空间允许将类型后期绑定到代码,因此您只需要在文件中使用要使用的类型的规范名称(名称空间+名称),从而快速编译.
在C++中,没有模块comcept,只有完全不了解彼此的编译单元.
现在关于它们的使用,通常很好的做法是在C++中使用命名空间来封装模块(可执行文件或dll/so),一些实现代码或任何有用的代码子部分.这说大多数时候最好没有太深的命名空间层次结构.由于历史原因,很多C++开发人员在很长一段时间内都不知道C++有一个名为namespace的功能.现在我们所谓的"现代C++"表明你已经了解它,但是今天仍然使用了许多旧的C++代码,也许这就是你在谈论命名空间时所看到的.
C++中的命名空间是一个与其他语言不同的特性,这也使得它在代码中的写作方式或多或少.事实上,它是如此不同,你根本不会以同样的方式管理它,当你来自.Net时,代码真的很难理解.因此,您不应该在语言之间以相同的方式使用名称空间,它们实际上是不同的概念.