Можно ли правильно использовать std::aligned_storage только через новое размещение?

Прочитал несколько строгих вопросов о псевдонимах, таких как Приведение массива байтов к POD или ​​Псевдоним ` T*` с `char*` допускается. Разрешено ли и наоборот?

Из них я делаю вывод, что единственный законный способ доступа к ячейке памяти, объявленной как любой тип (в частности, (массив) char) в качестве другого типа, заключается в вызове размещения new на нем, так как это изменило бы динамический тип.

Поскольку std::aligned_storage обычно должен иметь базовый тип, отличный от предполагаемого use, мне кажется, невозможно использовать хранилище, не вызвав сначала размещение на нем new.

Так что мне не разрешили бы создатьalign_storage, например. двойник и использовать его как двойник с помощью приведения указателя? Или, скорее, прежде чем мне будет разрешено обращаться к памяти как к двойнику с помощью приведения указателя, мне нужно будет сделать для нее новое размещение, «превратив его в» динамический объект типа double?


person Martin Ba    schedule 10.01.2017    source источник
comment
stackoverflow.com/questions/13466556/   -  person Martin Ba    schedule 11.01.2017
comment
Обратите внимание, что стандарт говорит, что время жизни объекта с пустой инициализацией начинается, когда получено хранилище с правильным выравниванием и размером. [basic.life]   -  person Ben Voigt    schedule 11.01.2017
comment
Я думаю, что std::aligned_storage не особенный, поэтому это обман stackoverflow.com/questions/37644977/. Можешь проверить, не думаешь ли ты, что здесь происходит что-то еще?   -  person    schedule 11.01.2017
comment
@BenVoigt Согласно ответу на другой вопрос, на который я ссылался, без размещения нового объекта нет, поэтому не нужно учитывать время жизни. (Ты там даже участвовал в комментариях.)   -  person    schedule 11.01.2017
comment
@hvd: Ну, по определению объект — это область хранения, а область хранения, безусловно, существует. А в C можно задать динамический тип области хранения путем записи в нее, тип копируется из исходного выражения в область назначения. Нарушение совместимости с этим правилом было бы очень плохо.   -  person Ben Voigt    schedule 11.01.2017
comment
@hvd: Да, я принимал участие в комментариях. И согласился с ответом, отличным от принятого (ваше использование определенного артикля недопустимо, на той странице нет ответа, их много).   -  person Ben Voigt    schedule 11.01.2017
comment
@BenVoigt Объект больше не определяется, и независимо от того, хорошая это идея или нет, по вашему или по моему мнению, ничего не меняет. Что касается ответа, я имел в виду принятый ответ, извините, что упустил его.   -  person    schedule 11.01.2017
comment
@hvd: я пропустил c++1z по этому вопросу? Приятно отметить, что есть план изменить определение object, но пока этого не произошло.   -  person Ben Voigt    schedule 11.01.2017
comment
@BenVoigt: необходим термин для описания области хранения, доступ к которой можно получить таким же образом, как к массиву символьного типа аналогичного размера. Если термин «объект» определяется как нечто иное, каким ретронимом можно было бы заменить это значение термина «объект»?   -  person supercat    schedule 11.01.2017