JSF.CAST.MBR.ORDER.ACCESS_SPEC

アクセス指定子で区切られた非静的データメンバーの割り当て順序についての仮定をアルゴリズムで行ってはなりません。この規則は、アクセス指定子で区切られた非静的データメンバーの順序に関する仮定をアプリケーションが行うことを禁止することを目的としています。

理論的根拠

アクセス指定子で区切られた非静的データメンバーの割り当て順序は不定です。

例 1

1  class A
2  {
3  …
4  protected: // a could be stored before b, or vice versa
5      int32 a;
6  private:
7      int32 b;
8  };
9  
10  …
11 
12  // Bad: application assumes that objects of
13  // type A will always have attribute a
14  // stored before attribute b.
15  A* a_ptr = static_cast<A*>(message_buffer_ptr);

例 2

1  struct B
2  {
3      int32 a;
4      int32 b;
5  };
6  …
7  // Good: attributes in B not separated
8  // by an access specifier
9  B* b_ptr = static_cast<B*>(message_buffer_ptr);