【发布时间】:2025-12-08 06:05:01
【问题描述】:
这让我很困惑。所有代码示例为namespaceA 和namespaceB,方法名称为foo() 和bar() 也无济于事。每个人都解释它的方式看起来好像命名空间是前 OOP 时代的遗迹,你不能说“一流的汽车给燃料水平”,但不得不从另一种方法来解决这个问题。但是当我现在想做一个 C++ 级别时,使用命名空间有什么意义呢?并不是说标题已经足够令人困惑,命名空间对我来说绝对没有意义,无论它们是如何工作的,或者为什么要使用它们。
例如,假设我有一个围绕Traffic 构建的项目。您将拥有Cars 及其组件、Drivers 和Passengers 以及Road 的类。
现在,Road 有Cars,每个Car 有Persons。这会是什么样子?
你有命名空间Road、Car、Person吗? main() 会使用命名空间Road 来访问标题中的内容吗?命名空间Road 是否包含命名空间Car,而Car 是否包含命名空间Person,并且main() 是否可以通过此访问Person 中的方法?大多数指南都是这样解释的,但是我真的看不出这比只导入头文件有什么好处,那不是有同样的效果吗?
或者您会将多个标头放在同一个命名空间中,例如 namespace Traffic 与所有这些类?可以嵌套命名空间吗?
我知道 C#,但直到我刚才查找它时才知道它有命名空间,并且从不需要它,而在 Java、Python 和 Dart 中,这些也从未出现过。由于我想自学 C++,所以我现在有点困在这里,在这里问这个问题。到目前为止,我也从未在 C++ 中使用过它们,但我想好好学习它。
【问题讨论】:
-
在 Java、Python 和 Dart 中也从未出现过 Python 模块创建隐式命名空间。我不了解 Java 和 Dart。
-
Java 有包,还有那些分区名称
-
在您的 Road/Car/Person 示例中,我希望这些类可能位于名为 Models 或类似性质的名称空间中。无法想象您为什么要为每个类创建一个命名空间,因为其目的是在逻辑上将类组合在一起。
-
在 C++ 为语言添加命名空间之前,有些人会使用结构作为临时命名空间,以帮助收集和组织组件。但这有一些命名空间没有的不良行为,因此在 C++ 的演变过程中,
namespace被正式添加到语言中,标准 C++ 库被放入::std命名空间。
标签: c++ header namespaces