Почему UB для передачи char массив в качестве аргумента размещения нового? типа «массив n unsigned char» или типа «массив n std :: byte» ([[cstdddef.syn]), этот массив обеспечивает хранилище для созданного объекта [...]
[basic.types.general#4] , также соответствует: > plackque. /> последовательность n un unsigned char -объектов
В качестве потенциально достоверного представления объекта полного объекта т. char »или« массив n std :: byte », будет неопределенным поведением, для того, чтобы быть не определенным Spec как действительным.
Код: Выделить всё
struct A { ... };
alignas(A) char buf[sizeof(A)];
auto ptr = new (buf) A(...);
(еще одно важное отличие в самом коде, чтобы избежать проблем выравнивания и сделать его потенциально определенным, Alignas (a) < /code>, который не появляется в исходном вопросе). < /P>
. хранилище?
Код: Выделить всё
auto buf = ::operator new(sizeof(A), std::align_val_t(sizeof(A)));
auto p = new (buf) A(...); // buf is void*, not unsigned char* nor std::byte*
// ...
p->~A();
::operator delete(buf);
< /code>
На случай, если это UB, означает ли это, что этот пример из спецификации также является UB: < /p>
void* place = operator new(sizeof(Something));
Something* p = new (place) Something();
Код: Выделить всё
using ostream = basic_ostream;
using iostream = basic_iostream;
Код: Выделить всё
using char_type = charT;
basic_istream& read(char_type* s, streamsize n);
Код: Выделить всё
using char_type = charT;
basic_ostream& write(const char_type* s, streamsize n);
< /code>
Если char* недопустит для буфера, почему бы не использовать Unsigned char* Здесь? < /p>
Вопрос 4 - существует ли фактическое различие для представления битов между Char и unsigned char, в стороне или не иметь знакового бита? />
Значения, хранящиеся в бессознанных битовых полях и объектах типа Unsigned char, должны быть
с использованием чистой бинарной нотации. < /p>
< /blockquote>
, по-видимому, дифференцирует, в некотором смысле, между Char < /code> и unsigned char < /код>. C ++ имеет одинаковое различие? Если да, то где это сказано в спецификации и как это различие влияет на вопросы от 1 до 3? /> Связанные посты:
[list]
[*] Каково значимость массивов std :: byte [*] />
[/list]
посты выравнивания, в домене, но не связанных, imho:
[*] nimrod «Кодирующая лаборатория - суббота», когда я не имею никакого использования, я не имею никакого использования, когда я не имею никакого использования. Размещение нового оператора?
Если C ++ 17 и выше гарантирует, что распределители должны поддерживать переизмененные типы, это означает, что мы можем избежать создания типов вручную? Типы?)>
Подробнее здесь: https://stackoverflow.com/questions/796 ... s-in-the-c
Мобильная версия