为什么要使用命名空间?

Mar*_* Ge 2 c++ namespaces header

这让我很困惑。所有代码示例都是namespaceAnamespaceB,方法名称是foo()bar()也没有帮助。每个人都解释它的方式使它看起来好像命名空间是前 OOP 时代的遗物,在那里你不能说“类汽车提供燃料水平”,但必须从另一种方法来解决这个问题。但是当我现在想做一个 C++ 级别时,使用命名空间有什么意义呢?并不是说标题已经足够令人困惑,命名空间对我来说绝对没有意义,无论是它们的工作方式还是为什么使用它们。

Traffic例如,假设我有一个围绕 构建的项目。您将拥有Cars 及其组件、Drivers 和Passengers 以及Road. 现在,RoadCars,每个Car都有Persons。这会是什么样子?

你有命名空间Road, Car,Person吗?会main()使用命名空间Road来访问标题中的内容吗?命名空间是否Road包含命名空间Car,并且Car包含命名空间Person,并且可以通过它main()访问 中的方法Person?这是大多数指南解释这一点的方式,但我并没有真正看到这比仅导入头文件的优势,这不会有相同的效果吗?

或者你会在同一个命名空间中放置多个头文件,比如namespace Traffic所有这些类?你能嵌套命名空间吗?

我知道 C# 并且一直不知道它有命名空间,直到我刚刚查找它,并且从不需要它,在 Java、Python 和 Dart 中,这些也从未出现过。因为我正在尝试自学 C++,所以我现在有点被困在这里,在这里问这个问题。到目前为止,我也从未在 C++ 中使用过它们,但我想正确地学习它。

Ast*_*ngs 6

对于小型、自包含的项目,不需要太多名称空间,而且您永远不会为代码中的每个对象或概念创建名称空间。

使用库的大型项目受益于与这些库引入的名称隔离,以及一些内部组织,使可读性更容易。

同样,在创建库时,最好将其内容放入命名空间中,以免给用户带来麻烦和冲突(因为您不知道他们的项目有多大,以及他们可能想要什么名称)自己用)。

打个比方:如果你有三本书,你就不用按字母顺序组织它们。但是,一旦你有一百个,你可能会决定将它们分类在你的书架上,以便于参考和心理健康。

而且,如果您现在从朋友那里再借 20 本书,您可能会将它们单独存放在一堆,以便在您需要归还时更容易找到它们。

所以,在某种程度上,这是一个……当你需要它时,你会知道为什么需要它。