compiler c++ c++11 c++03

c++ - compiler - ¿Estos miembros tienen pedidos no especificados?



c++14 (1)

Un colega me dijo que, en el siguiente tipo, todos los miembros tienen pedidos no especificados en la memoria (relacionados entre sí).

Dudo esto, porque todos tienen el mismo nivel de acceso.

¿Quién es correcto?

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


Su colega es correcto para C ++ 03:

[C++03: 9.2/12]: los miembros de datos no estáticos de una clase (no sindicalizada) declarados sin un especificador de acceso intermedio se asignan de modo que los miembros posteriores tengan direcciones más altas dentro de un objeto de clase. El orden de asignación de los miembros de datos no estáticos separados por un especificador de acceso no está especificado (11.1). [..]

Pero tienes razón para C ++ 11:

[C++11: 9.2/14]: los miembros de datos no estáticos de una clase (no sindicalizada) con el mismo control de acceso (Cláusula 11) se asignan de modo que los miembros posteriores tengan direcciones más altas dentro de un objeto de clase. El orden de asignación de los miembros de datos no estáticos con diferentes controles de acceso no está especificado (11). [..]

(Encuentra la diferencia.)