C ++静态函数:放入类的内部或外部范围?

时间:2017-01-10 00:37:58

标签: c++ scope

假设我在头文件中有如下类:

class A {
public:
    void foo();
}

函数foo需要调用另一个" helper"名为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(); ...
}

2 个答案:

答案 0 :(得分:2)

  

除了foo之外的任何地方都不需要Bar。

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

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

改为使用:

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

答案 1 :(得分:2)

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

例如,您可以在班级的cpp文件中使用:

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

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

cpp文件中的静态函数也只有文件范围,但我发现static关键字在使用时会混淆。