嗨,我有一个问题,在不使用类的情况下,是否有其他方法来定义只能在模块内部看到的“私有”变量,以便当我们将不同的模块包含到文件中时,那些具有相同名称的变量不同模块中不冲突吗?
我知道解决这个问题最简单的方法是使用不同的名称,但我实际上是将 Fortran 代码翻译为 C++,除非必须,否则我真的不想更改名称。
我不想使用类的原因是,它确实是一个大模块,有很多很多变量。对我来说,在一个类中有这么多私有变量会很奇怪。
非常感谢!
我认为头文件内的变量无论如何都是公共的,因为当您将头文件包含到另一个文件中时,您实际上将所有内容复制到后面的文件中。基于这个想法,我尝试将那些“应该是私有的”变量从头文件移动到相应的 cpp 文件。但还是不行。
谢谢!
拥有全局私有变量的传统解决方案是将其放入源(.cpp)文件中。如果您希望有多个同名的全局变量,这是不可能的(不包括
static
)。如果您想要相同的名称,请将变量放入命名空间中。最好是仅在源文件内部可用的一个。匿名命名空间也是一个选项,它允许您像全局命名空间中的变量、函数、类等一样行事,但它们实际上只在翻译单元内部可用。另一个可以实现与匿名命名空间相同效果的选项是static
。 (正如评论中指出的)。将变量声明为静态变量,它们不会链接到其主翻译单元之外。这称为内部链接。
现代的解决方案是在 C++20 中使用 modules。这些允许您在模块单元内拥有私有变量、函数、类等。如果您的编译器支持它们,那么这是另一个不错的选择。