в любой реализации, однако.

уктура обеспечиваетstd::aligned_storage typedef, по крайней мере, в соответствии сtypecppreferenceПредоставляет тип typedef члена, который представляет собой PODType, подходящий для использования в качестве неинициализированного хранилища для любого объекта, размер которого не превышает Len и требование выравнивания которого является делителем Align.:

Значение по умолчанию Align является самым строгим (самым большим) требованием выравнивания для любого объекта, размер которого не превышает Len.

В частности, со значением по умолчанию

, соответственно выровненный дляAlignлюбой объект чей размер не более лен.Обратите внимание, что нет никаких предупреждений или исключений для выровненных типов (и в любом случае платформа, которую я использую, gcc, поддерживает, по крайней мере, некоторые выровненные типы).

Как на самом деле может работать такая реализация? Для удовлетворения требования «любой объект» может показаться, что:

На платформе, где

 для типовalignof(T) <= sizeof(T), надо всегда соответствовать примерноT байты, поскольку объект размеромLen может иметь выравнивание доLen, Конечно, это будет тратить много памяти для большихLenНа платформе, гдеLen! может быть больше чемalignof(T)Я не понимаю, как это вообще может быть реализовано. Тем не менее, это неsizeof(T)ясно для меня что такой тип может даже существовать.На основе

мое тестированиепо умолчанию ценности,Align просто всегда выравнивается до 16, независимо от длины Это означает, что хранилищеgccне подходит дляЛюбые объект, но только объекты фундаментального выравнивания ( на этой платформе).alignof(max_align_t) == 16в

Ответы на вопрос(1)

Решение Вопроса

[Meta..other] / 2Это определяется реализацией, поддерживается ли какое-либо расширенное выравнивание.,

Это довольно раздражает, когда они указывают такие вещи после большой таблицы без указателя. Я только что добавил предложение в cppreference.

Таким образом, сноска "2" не встречается нигде в тексте, верно? Что странно, так это то, что GCC обычно поддерживает расширенные выравнивания, по крайней мере, до 128, но не здесь. Я думаю, что нет никаких ограничений, что расширенная поддержка выравнивания должна быть

 BeeOnRope28 сент. 2017 г., 19:53
последовательный в любой реализации, однако.Как std :: align_storage может предоставить правильно выровненное хранилище для любого объ

Ваш ответ на вопрос