C++静态函数:放在类的范围之内或之外
C++ Static Function: Put Inside or Outside Scope of Class?
假设我在头文件中有一个类,如下所示:
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
关键字在以这种方式使用时令人困惑。
相关文章:
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 检查编译时是否存在静态函数
- 名称隐藏对静态函数继承的实例使用
- 如果 C 函数仍然可以间接执行(通过回调函数),那么将它声明为静态函数是否是一种不好的做法?
- 类中静态函数C++意外结果
- 在工人类中使用不同类的静态函数进行实验
- 类 Referention 中C++回调函数引用非静态函数
- 指向模板上下文中的成员函数或静态函数的指针
- 如何检测 Clang AST C++中的静态函数
- 内联asm编译器屏障(内存阻塞器)是算作外部函数,还是算作静态函数调用
- 如何在静态函数中使用成员函数数组
- (2 问题)"类"类型重新定义(即使 #pragma 一次),以及静态函数内的静态成员对象初始化?
- std::vector 范围构造函数可以调用显式转换吗?
- 生成代码(在编译时)以调用模板的每个实例化的静态函数
- C++静态函数:放在类的范围之内或之外
- C++文件范围静态函数
- 静态变量生存期、文件范围与函数范围
- 在依赖范围内调用静态函数模板
- 块范围静态的析构函数可以调用多次
- 函数范围静态对象的构造函数引发异常