< /blockquote>
und: < /p>
Eine Operation, die die Lebensdauer eines Arrays unsigned char oder std beginnt :: byte erstellt implizit Objekte im Bereich des Speichers, der vom Array besetzt ist. />
Code: Select all
// The call to std::malloc implicitly creates an object of type X
Bedeutet das, dass das Folgende legal und korrekt ist?
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>
Wenn nicht, was fehlt mir? Und gibt es eine Möglichkeit, es unter Verwendung der C ++ 23 -Untergruppe legal zu machen, die LLVM 17 (Clang und Libc ++) unterstützt? Ich selbst bin nicht eins, also würde ich eine Erklärung als "einfache" Begriffe wie möglich sehr schätzen.