Я рассматривал проект стандарта и не могу найти то, что я ищу.
Если у меня есть тип стандартного макета
struct T {
unsigned handle;
};
Тогда я знаю, что reinterpret_cast<unsigned*>(&t) == &t.handle
для некоторого T t;
Цель состоит в том, чтобы создать несколько vector<T> v
и передать &v[0]
функции C, которая ожидает указатель на массив целых чисел без знака.
Итак, определяет ли стандарт sizeof(T) == sizeof(unsigned)
и это означает, что массив T
будет иметь тот же макет, что и массив unsigned
?
В то время как этот вопрос затрагивает очень похожую тему, я спрашиваю о конкретном случае, когда и элемент данных, и класс являются стандартными макетами, а элемент данных является фундаментальным типом.
Я прочитал несколько абзацев, которые, похоже, намекают, что, возможно, это может быть правдой, но ничего, что попадает в гвоздь на голове. Например:
§ 9.2.17
Два типа стандартной структуры (раздел 9) являются совместимыми с макетами, если они имеют одинаковое количество нестатических элементов данных и соответствующих нестатические элементы данных (в порядке объявления) имеют совместимость с макетами Типы
Это не совсем то, что я ищу, я не думаю.