Page 1 of 1

Verständnis implizite lebenslange Schöpfung und Aliasing in C ++

Posted: 01 Feb 2025, 09:48
by Anonymous
Ich versuche meinen Kopf um die implizite Lebensdauer- und Aliasing -Regeln in C ++ zu wickeln. Einige Operationen werden als implizit erstellen Objekte in einem bestimmten Speicherbereich. Für jede Operation, die als implizites Erstellen von Objekten angegeben ist, wird diese Operation implizit die Lebensdauer von Null- oder mehr Objekten impliziten Lifetime in seinem angegebenen Speicherbereich erstellt und startet, wenn das Programm das Verhalten definiert hat.
< /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.