假设您有以下非静态成员函数:
// .h
struct C {
void f();
}
现在假设您想C::f
通过使用特定于 的一些子函数来实现C::f
,以使其更短且更具可读性;例如:
// .cpp
void C::f() {
h1();
h2();
//...
hn();
}
假设这些 h() 的许多函数不需要访问任何数据成员。这意味着您可以将函数定义为静态自由函数(在一个 .cpp 中)或成员函数(静态或非静态)。
你会让它们成为 C 的静态自由函数或函数成员吗?
第一种情况的一个优点是您不必在以下位置声明它们C
:
// .cpp
static void h1() {//...}
static void h2() {//...}
static void hn() {//...}
另外,如果我没记错的话,没有全局命名空间污染的风险,因为它们是static,也就是说它们只能从同一单元 .cpp (其中还定义了 C::f )内的其他函数中看到。
而在第二种情况下,您必须在 中声明它们C
,尽管正如我所说,它们只应该由C::f
.
// .h
struct C {
void f();
private:
static void h1(); // can be either static or non-static
static void h2();
static void hn();
}
// .cpp
void C::h1() {//...}
void C::h2() {//...}
void C::hn() {//...}
我认为第二个版本会无缘无故地导致代码臃肿,尤其是如果您最终不得不拆分其他长成员函数,例如C::f
使代码更具可读性。