我知道静态函数声明是在.cpp文件的顶部完成的,因此我只能在该文件中使用它,并且如果其他文件中的函数具有相同的名称,编译器也不会抱怨。有相当于班级的课程吗?也就是说,声明仅在该文件内使用的“私有”类。

最佳答案

首先,C ++规范不引用源代码文件。

这里的相关单元是翻译单元,也称为编译单元,实际上,它由对实现文件进行预处理得到的所有源代码组成。

因此,您可以在任何类型的文件中使用内部链接(也称为static)功能。尽管将它们放在头文件中没有太大的实际意义。同样,代码中的位置(无论是第一个还是最后一个)都无关紧要。

内部链接功能的替代方案,例如

static void foo() {}


是将函数放置在匿名名称空间中,例如

namespace {
    void foo() {}
}  // namespace <anon>


而且您也可以在课堂上做到这一点。

实际上,这等效于

namespace very_unique_autogenerated_name {
    void foo() {}
}

// And in global namespace:
using namespace very_unique_autogenerated_name;


这意味着您可以像在全局命名空间中一样引用匿名命名空间中的事物,并且可以在其中具有外部链接事物,而它们的名称不会与其他翻译单元中的匿名命名空间中的其他事物冲突。

关于c++ - C++中是否有“静态类”,就像要在同一文件中访问的静态函数一样?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23164676/

10-11 23:07
查看更多