这些成员是否有未指定的订单?

时间:2013-04-02 11:35:44

标签: c++ c++11 c++03

一位同事告诉我,在以下类型中,所有成员在内存中都有未指定的顺序(相对于彼此)。

我对此表示怀疑,因为它们都具有相同的访问级别。

谁是对的?

struct foo { public: int x; public: int y; public: int z; };

1 个答案:

答案 0 :(得分:33)

你的同事对C ++ 03来说是正确的:

  

[C++03: 9.2/12]:分配声明而没有插入访问说明符的(非联合)类的非静态数据成员,以便后面的成员在类对象中具有更高的地址。由访问说明符分隔的非静态数据成员的分配顺序未指定(11.1)。 [..]

但你对C ++ 11是正确的:

  

[C++11: 9.2/14]:分配具有相同访问控制的(非联合)类的非静态数据成员(第11条),以便后面的成员在类对象中具有更高的地址。未指定具有不同访问控制的非静态数据成员的分配顺序(11)。 [..]

(发现差异。)