C++静态函数:放在类的范围之内或之外

C++ Static Function: Put Inside or Outside Scope of Class?

本文关键字:范围 静态函数 C++      更新时间:2023-10-16

假设我在头文件中有一个类,如下所示:

class A {
public:
    void foo();
}

该函数foo需要调用另一个名为 bar 的"帮助程序"函数。除了foo内部之外,其他任何地方都不需要酒吧。是否应该在A范围之外静态定义:

(源文件)

static void bar() { ... }
void A::foo() {
    bar(); ...
}

还是在课堂上?

(标题)

class A {
public:
    void foo();
private:
    void bar();
}

(苏斯)

void A::bar() { ... }
void A::foo() {
    bar(); ...
}

除了 foo 内部之外,其他地方都不需要酒吧。

如果是这样,那么bar应该是类 A 的私有成员函数 - 无需在全局命名空间中定义bar

static void bar() { ... }  // not needed

而是使用:

void A::bar() { ... } // <- bar should be private member function

通常,您应该只在必要时允许访问类的内部。最好将函数放在类之外并限制其范围 - 作为静态函数或匿名命名空间。这样,您就不会污染全局命名空间,也不允许对类内部进行不必要的访问。

例如,在类的 cpp 文件中,您可以具有:

namespace {
   void bar() {.....}
}

然后,该帮助程序函数可用于同一 cpp 文件中的类方法。

cpp 文件中的静态函数也只有文件范围,但我发现 static 关键字在以这种方式使用时令人困惑。