拥有一个自由函数(在匿名命名空间中并且只能在单个源文件中访问)并将所有变量作为参数发送,而不是拥有一个没有任何参数的私有(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/