为什么 "C++ Core Guidelines" 推荐 prefer 独立函数而不是 class 成员?

Why does the "C++ Core Guidelines" recommends the prefer independent functions instead of class members?

C++ Core Guidelines section C.4推荐"make a function a member only if it needs direct access to the representation of a class",使用下面的例子:

class Date {
    // ... relatively small interface ...
};

// helper functions:
Date next_weekday(Date);
bool operator==(Date, Date);

我不明白这里的推理。在我看来,这将是一个更好的选择:

class Date {
    // ... relatively small interface ...

    Date next_weekday(Date const&) const;
    bool operator==(Date const&) const;
};

这个推理有什么好处?

它增加了封装

当您更改 Date 的私有实现时,您只需检查 // ... relatively small interface ... 以前的假设可能不再成立的地方,而不是 // ... relatively small interface ... + next_weekday + operator== + ...

成员函数 可以访问 class 的 private 个成员。这意味着他们可以在他们的逻辑中使用 class 的内部表示。

非成员函数 只能访问 class 的 public 个成员。这意味着他们只能使用class公开暴露的接口,从而提高封装性。