为啥要在命名空间中使用类
Posted
技术标签:
【中文标题】为啥要在命名空间中使用类【英文标题】:why to use classes inside namespace为什么要在命名空间中使用类 【发布时间】:2015-01-25 10:12:37 【问题描述】:我想知道在命名空间内写类名的真正原因。他们解决什么目的?他们包括课程还是做其他事情?非常感谢任何帮助。
namespace ns3
class Channel;
class SpectrumChannel;
class MyMod; ;
class NewModule : public NetDevice
public:
// methods and data
【问题讨论】:
搜索forward declaration
谢谢,这是告诉编译器我将来要使用这些类的一种方式,所以要做好准备?我很困惑,因为上面的包含文件不包括定义类(Channel、SpectrumChannel、MyMod)的文件。
它告诉编译器“我稍后会给你更多关于这些内容的细节,但我需要你知道它们现在存在”。在典型情况下,这意味着某处存在一个类,该类接受对这些类之一的引用或指针,但这不是实际定义内容的正确位置 - 或者类之间存在相互关系,所以类 Y 需要类 X,类 Y 以某种方式引用 X。
感谢 Mats,您的解释很有帮助。
【参考方案1】:
最好将您的类放入命名空间,以避免与您可能使用的其他代码(库)发生名称冲突(项目稍后也会出现)。当使用Vector
、Logger
等常用名称作为类名时,很容易发生它们也用于您想要使用的其他代码的情况。当您将类放入(经过深思熟虑的)命名空间时,名称冲突的可能性就会降到最低。
前向声明是一个不同的(独立的)主题。当类在命名空间内定义时,它们的前向声明也必须在该命名空间内完成。
【讨论】:
感谢您的解释,我仍然有以下问题:这是一种告诉编译器我将来要使用这些类的方法,所以要做好准备?我很困惑,因为上面的文件不包含定义类(Channel、SpectrumChannel、MyMod)的文件。 为了解析 C/C++ 编译器需要知道哪些标识符是指类型。如果在一个文件中只使用一个指针或一个类型的引用,编译器不需要知道类型的细节(大小,方法,..)来编译这个单个文件,所以前向声明就足够了。如果代码中有类型的循环依赖,则需要前向声明。使用前向声明的另一个原因是编译速度更快(前向声明类型的类定义不需要解析,并且当类更改时,您不必只使用前向 decl 重新编译代码) 谢谢,很有帮助。以上是关于为啥要在命名空间中使用类的主要内容,如果未能解决你的问题,请参考以下文章
C#中类和命名空间是啥?为啥要用?啥时候用到?请高手详细说明