假设我在头文件中有如下类:
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(); ...
}
答案 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
关键字在使用时会混淆。