30 January 2024

C++ 核心指南目录

“Use a conventional class member declaration order”

理由

常规的类成员顺序提升可读性。

声明类成员的时候,遵循以下顺序:

  • 类型:类类型、枚举类型、别名(using)
  • 构造函数、赋值函数、析构函数
  • 成员函数
  • 成员数据

publicprotected 最后 private

如果没有其他更好的想法的话,请遵循这条规则。这条规则是很多人要求添加的。

例子

class X {
public:
    // interface
protected:
    // unchecked function for use by derived class implementations
private:
    // implementation details
};

例子

有时候,默认的声明顺序违反了公开接口和实现细节分开的想法,这个时候,私有类型和函数定义可以放在 private 下。

class X {
public:
    // interface
protected:
    // unchecked function for use by derived class implementations
private:
    // implementation details (types, functions, and data)
};

坏例子

不要连续放多个一样的访问设定,如 public 。或者交替使用不同的访问设定。

class X {   // bad
public:
    void f();
public:
    int g();
    // ...
};

用宏定义声明一组成员往往会违反此规则。其实宏定义还混淆了我们所要表达的程序意图。

强化

标记违反本规则建议的顺序的情况。可能会有很多老的代码违反了此规则。