Давайте не будем рассматривать этику на мгновение. Давайте рассмотрим стандарт.
То, что вы предлагаете сделать, нестандартно. См. Раздел 9.2, раздел 12 стандарта. «Порядок распределения нестатических членов, разделенных спецификатором доступа, не указан». Поэтому, если у вас есть класс с частными членами и структура без частных членов, стандарт не гарантирует, что члены будут в одном порядке.
Таким образом, если ваш взлом работает, он работает только случайно, что создатели компилятора сделали это именно так. Нет никакой гарантии, что он будет работать на другом компиляторе, более поздней версии одного и того же компилятора или с разными классами.
Не говоря уже о том, что, если у вас нет полномочий на изменение класса (например, для предоставления простой функции доступа), у вас, вероятно, нет полномочий на объект, если какая-либо деталь реализации в классе изменяется. (Одна из идей, стоящих за публичным и частным, заключается в том, чтобы отличить то, что обещано от того, что свободно меняемо.) Поэтому макет может измениться, или член может означать что-то другое или полностью удалить.
Herb Sutter написал a Guru of the Week столбец по этому вопросу.
О, насколько этика идет? Если вам действительно нужно делать что-то подобное, и вы не можете выбраться из него, запишите его очень осторожно. Если ваши стандарты кодирования имеют какую-то процедуру для флага нестандартного поведения, используйте их. Если нет, будьте очень осторожны, заметив это таким образом, что это не будет упущено, когда что-то пойдет не так.
Что конкретно вы пытаетесь сделать, выполнив это? –