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

уктура обеспечивает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)

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