Стандарт говорит: < /p>
Некоторые операции описываются как неявное создание объектов в указанной области хранения. Для каждой операции, которая определяется как неявное создание объектов, эта операция неявно создает и начинает срок службы нуля или более объектов типов неявного времени в указанной области хранения, если это приведет к тому, что программа, определенная поведение.
< /blockquote>
и: < /p>
Операция, которая начинается :: Байт косвенно создает объекты в области хранения, занятого массивом. />
Код: Выделить всё
// The call to std::malloc implicitly creates an object of type XЗначит ли это, что следующее является законным и правильным?
constexpr size_t N = 10;
constexpr size_t S = sizeof(uint32_t);
std::vector buffer;
buffer.resize(N * S);
for (size_t i = 0; i < N * S; i += S)
*reinterpret_cast(&buffer.data()[i + 2 * S]) = 42;
uint32_t x;
for (size_t i = 0; i < S; ++i)
*(reinterpret_cast(&x) + i) = buffer;
assert(x == 42);
< /code>
Если нет, то что мне не хватает? И есть ли способ сделать его законным, используя подмножество C ++ 23, которое поддерживает LLVM 17 (Clang и Libc ++)? , Я сам не один, поэтому я бы очень ценил объяснение как можно более «простым» терминам.
Подробнее здесь: https://stackoverflow.com/questions/794 ... asing-in-c
Мобильная версия