Umwandlung einer negativen Ganzzahl in eine größere vorzeichenlose Ganzzahl

Ich habe Code gefunden, der die folgende Konvertierung ausführt:

static_cast<unsigned long>(-1)

Soweit ich das beurteilen kann, definiert der C ++ - Standard, was passiert, wenn ein vorzeichenbehafteter ganzzahliger Wert in einen vorzeichenlosen Integraltyp umgewandelt wird (siehe:Was passiert, wenn ich einer vorzeichenlosen Variablen einen negativen Wert zugebe?).

Die Sorge, die ich im obigen Code habe, ist, dass der Quell- und der Zieltyp unterschiedlich groß sein können und ob sich dies auf das Ergebnis auswirkt oder nicht. Würde der Compiler den Quellwerttyp vor dem Casting vergrößern? Würde es stattdessen in eine ganze Zahl ohne Vorzeichen der gleichen Größe umgewandelt und diese dann vergrößert? Oder vielleicht noch etwas?

Mit Code klären,

int nInt = -1;
long nLong = -1; // assume sizeof(long) > sizeof(int)

unsigned long res1 = static_cast<unsigned long>(nInt)
unsigned long res2 = static_cast<unsigned long>(nLong);

assert(res1 == res2); // ???

Grundsätzlich sollte ich mir Gedanken darüber machen, wie man Code schreibt

static_cast<unsigned long>(-1L)

Über

static_cast<unsigned long>(-1)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage