c++ - 自由函数与成员函数

标签 c++ dependencies member-functions pimpl-idiom non-member-functions

拥有一个自由函数(在匿名命名空间中并且只能在单个源文件中访问)并将所有变量作为参数发送,而不是拥有一个没有任何参数的私有(private)类成员函数并直接访问成员变量有什么优势?
标题:

 Class A {
    int myVariable;
    void DoSomething() {
       myVariable = 1;
    }
 };
来源:
 namespace {
    void DoSomething2(int &a) {
        a = 1;
    }
 }

 int A::SomeFunction() {
    DoSomething2(myVariable); // calling free function
    DoSomething(); // calling member function
 }
如果您更喜欢使它们成为成员,那么如果我首先调用一个不访问任何成员变量的函数,但该函数调用另一个正在访问成员的函数,该怎么办。它们都应该是成员函数还是免费的?

最佳答案

看到这个问题:Effective C++ Item 23 Prefer non-member non-friend functions to member functions
还有C++ Member Functions vs Free Functions

你应该更喜欢自由函数,因为它促进了松散耦合。

仅当它有效时才考虑将其设为成员函数 在你类的胆量 ,并且您认为它确实与您的类(class)息息相关。

这是本书的要点 101 个 C++ 编码标准 ,它表示比成员函数更喜欢自由函数和静态函数。

尽管这可能被认为是基于意见的,但它允许保持类很少,并分离关注点。

这个answer声明:“这条规则的原因是,通过使用成员函数,您可能会意外地过度依赖类的内部结构。”

关于c++ - 自由函数与成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62829401/

相关文章:

c++ - 数组初始化和查找字母频率

c++ - 并发安全栈接口(interface)方法 : correct or not?

c++ - 如何在基类中存储和执行派生类成员函数

c++ - 声明一个与该模板的实例具有相同类型的变量

c++ - 为什么SDL程序不能显示BMP图片?

python - 我应该固定我的 Python 依赖项版本吗?

可以使用 gcc 确定缺少哪些 header 的 Makefile?

macos - 如何在 OS X Mavericks 上从 git 编译 Qt 5.2

c++ - 创建对象作为私有(private)成员变量与在成员函数中

python - 如何从 Python 中的另一个文件调用类方法?