Понимание неявного создания и псевдонизации в C ++C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Понимание неявного создания и псевдонизации в C ++

Сообщение Anonymous »

Я пытаюсь обернуть голову вокруг неявных правил жизни и псевдонимов в C ++. < /p>
Стандарт говорит: < /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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»