关于自由静态函数用法的文章

Article about free static function usage

本文关键字:静态函数 用法 文章 自由 于自由      更新时间:2023-10-16

我正在寻找一篇文章或文档,解释了当给定函数不修改或读取类的私有成员时,为什么自由静态函数优于私有成员函数。在我看来,优点是:

  • 少依赖

  • 更好的封装(对于"猛犸"类,知道至少那些函数调用不修改成员是有帮助的)

我确信有人已经写了比我更好的东西。

自由静态函数已过时。可以使用匿名命名空间中的函数。

它们的可维护性稍好一些——因为它们不能访问私有成员,所以它们对于实现细节的更改是健壮的。静态成员函数也可以独立于实现细节,但没有编译器对此进行验证。

如果你特别想找一篇文章,你应该阅读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对象上使用,并且不修改类。

  1. encapsulation表示相关数据和功能的结合。所以这里是不相关的

  2. 如果一个函数不改变成员变量,它被标记为const,但根据上下文,它仍然可以很高兴地属于class,而不是被迫成为一个孤独的自由static函数。

  3. 就我个人而言(这可以争论),我认为你应该把所有相关的功能放在一个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