如何正确 sort/arrange Class 会员

How to properly sort/arrange Class Members

我确定这个问题已经回答过几次了,我很快就会关闭这个话题,但我找不到它。

有没有推荐的成员函数排列方式?

我很确定不是所有事情都需要规则,但如果有关于这个主题的想法我想知道,这比按访问级别排序更重要。

示例 class 伪代码:

Class
     amethod()
     bmethod()
     cvariable
     avariable
     bvariable

除了 "use something that makes sense" 之外,我不知道有任何 generally/widely 公认的约定(例如,对变量进行分组而不是编写变量和函数的疯狂组合)。

然而,这不仅仅是一个风格问题:

在C++(和C)中,顺序直接映射到内存布局,这可以lead to different variable sizes because of alignment and padding。此外,如果以二进制格式序列化某些内容,数据中的值当然很重要(但以这种方式序列化并不是很好,因为 内存布局取决于...) .

而且,就像@huu 在评论中指出的那样,变量顺序决定了初始化顺序,这很重要,一个成员变量是用另一个成员变量(同一对象的)的值初始化的。变量声明顺序和初始化顺序不匹配会导致编译错误。

有一些建议,但比较模糊。唯一的共同点是,引用 Google Java Style Guide, § 3.4.2,

that each class order its members in some logical order, which its maintainer could explain if asked. For example, new methods are not just habitually added to the end of the class, as that would yield "chronological by date added" ordering, which is not a logical ordering.

Google C++ Style Guide 建议按可见性排序(这对 C++ 来说很明显),然后按类型排序:

  • Typedefs and Enums
  • Constants (static const data members)
  • Constructors
  • Destructor
  • Methods, including static methods
  • Data Members (except static const data members)

Oracle 的 Code Conventions for Java, § 3.1.3, 建议按类型排序,然后按可见性(对于变量)或功能(对于方法)排序:

  • Class (static) variables (ordered by visibility)
  • Instance variables (ordered by visibility)
  • Constructors
  • Methods (grouped by functionality rather than by scope or accessibility)