Изменение порядка членов класса - PullRequest
0 голосов
/ 11 октября 2018

недавно я читал о способности компилятора переупорядочивать члены в классе.Из стандарта C ++ 11:

§ 9.2.13

[...] Порядок размещения нестатических элементов данных с различным контролем доступа не определен.

Хотелось бы узнать, как это выглядит на практике.Основные компиляторы (меня интересуют g ++, clang и msvc) переупорядочивают членов класса в некоторых ситуациях?

Если нет, может ли произойти что-нибудь еще, что приведет к разной компоновке объектов на разных компиляторах (или при использовании разных флагов компилятора)?Предположим, что виртуальные методы не используются и виртуальная таблица не создается.

1 Ответ

0 голосов
/ 11 октября 2018

Вопрос, по сути, спорный.Единственный совместимый со стандартами способ обеспечить соответствие макета класса вашим ожиданиям - это убедиться, что класс является стандартным типом макета - и это гарантировало бы одинаковую компоновку на каждом совместимом компиляторе.

Одним из требований для такого типа является то, что все члены имеют одинаковый контроль доступа.

...