我的教授在大学告诉我们的内容与我在Stroustrup的书中所读到的内容之间存在一些混淆。
我们都知道C ++ header
基本上是一个集合
声明(在file.h中定义),它们可以包含例如a
课程集。它们非常有用,因为它们给了我们一个
存储在单个空间中的许多功能
命名空间是为了组织类,函数而发明的, 在没有定义类型的情况下,在程序的一部分中键入(...)。
当我必须创建一个项目时,我无法看到具体的区别。
如果我(例如)制作了一个解决不同程度方程的程序,我会把我需要的类放在一个文件中。例如,我将把equations.h
放在所有这些东西中:class secondDeg,class thirdDeg,class fourthDeg等等。
为什么我应该使用命名空间呢?
答案(我猜)是:因为你可以给一个更好的组织命名(参见std :: cin)。但在这种情况下我应该
eq
的命名空间,例如这真的很难吗?我不能只使用头文件并将我的所有类放在里面吗?
答案 0 :(得分:7)
为什么我应该使用命名空间呢?
命名空间可以包含多个标题,例如,namespace std
包含来自<vector>
<list>
等的定义。
您可以定义自己的namespace
以免污染全局命名空间并避免冲突。最好将命名空间限制为所需的最小值,因此通常会避免使用using namespace std;
。
答案 1 :(得分:6)
这真的是必要的吗?
这取决于。更好,更明确的选择是将您的声明嵌入namespace
。
我不能只使用头文件并将所有类放在里面吗?
当然可以,只是避免与全局(::
)范围内声明的符号发生任何冲突,并在头文件中避免使用using namespace <xxx>;
。
答案 2 :(得分:3)
您似乎在混淆两个截然不同的概念。标头是一个文件,通常用于包含声明。它可以包含函数声明,类,模板等。
命名空间是一种定义范围的方法,在该范围内声明的所有项都是唯一的。这允许您使用可能与标准中的名称冲突的函数和类名。例如
namespace mystuff
{
class list { };
};
您的列表不会与std :: list冲突。
可以在头文件中使用命名空间和 来声明属于该命名空间的类。但是,正如其他人所指出的那样,不鼓励在头文件中使用'using'指令,因为它可以创建命名空间旨在解决的名称冲突。