关于自由静态函数用法的文章
Article about free static function usage
我正在寻找一篇文章或文档,解释了当给定函数不修改或读取类的私有成员时,为什么自由静态函数优于私有成员函数。在我看来,优点是:
-
少依赖
-
更好的封装(对于"猛犸"类,知道至少那些函数调用不修改成员是有帮助的)
我确信有人已经写了比我更好的东西。
自由静态函数已过时。可以使用匿名命名空间中的函数。
它们的可维护性稍好一些——因为它们不能访问私有成员,所以它们对于实现细节的更改是健壮的。静态成员函数也可以独立于实现细节,但没有编译器对此进行验证。
如果你特别想找一篇文章,你应该阅读Scott Meyers在Effective c++中写的"第23条:比起成员函数,更喜欢非成员非友函数"。我建议这本书是所有认真的c++程序员的必读书目。
本主题的基本前提是,如果您可以使用类的现有接口方法实现自由函数,那么您应该这样做,因为这实际上简化了类。也就是说,能够看到类内部的代码越少,类就被封装得越好。添加更多的实际上会降低的封装。
你似乎误用了一些词,所以我试着澄清一下
class myclass {
private:
int data;
void func1(); // private mutator function
void func2() const; // private accessor function
static void func3(); // private static function
public:
int moredata;
void func4(); // public mutator function
void func5() const; // public accessor function
static void func6(); // public static function
}
void func7(myclass); // free function
static void func8(myclass); // static function can't be accessed outside file.
一般来说,操作符重载倾向于释放函数,以便在需要转换时在查找时找到它们。
当没有外部函数或类调用私有函数时,使用私有函数。
静态函数在不读取或写入myclass的情况下使用,但它们是类概念的一个组成部分。
常数函数可以在const
对象上使用,并且不修改类。
-
encapsulation
表示相关数据和功能的结合。所以这里是不相关的 -
如果一个函数不改变成员变量,它被标记为
const
,但根据上下文,它仍然可以很高兴地属于class
,而不是被迫成为一个孤独的自由static
函数。 -
就我个人而言(这可以争论),我认为你应该把所有相关的功能放在一个
class
中,或者至少是一个namespace
,而不是让它们单独存在。虽然从java,从设计pov这是一个有效的例子:http://download.oracle.com/javase/1.5.0/docs/api/java/util/Arrays.html, http://download.oracle.com/javase/1.5.0/docs/api/java/util/Collections.html
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 检查编译时是否存在静态函数
- 名称隐藏对静态函数继承的实例使用
- 如果 C 函数仍然可以间接执行(通过回调函数),那么将它声明为静态函数是否是一种不好的做法?
- 类中静态函数C++意外结果
- 在工人类中使用不同类的静态函数进行实验
- 类 Referention 中C++回调函数引用非静态函数
- 指向模板上下文中的成员函数或静态函数的指针
- 如何检测 Clang AST C++中的静态函数
- 内联asm编译器屏障(内存阻塞器)是算作外部函数,还是算作静态函数调用
- 如何在静态函数中使用成员函数数组
- (2 问题)"类"类型重新定义(即使 #pragma 一次),以及静态函数内的静态成员对象初始化?
- 生成代码(在编译时)以调用模板的每个实例化的静态函数
- C++无法访问或使用静态函数
- 如何将 cpp 文件中的静态函数公开给其他文件
- 将函数的引用设置为其他 c++ 文件中的非静态函数
- 方法的静态函数的等价性
- 扩展包含静态函数的类
- Constexpr静态成员函数用法
- 关于自由静态函数用法的文章