Heute habe ich diesen Code, die in einer Klasse:uint32_t destructor Rückgabewert
static const uint32_t invalid_index = ~uint32_t();
Meine Frage ist, was ist der Rückgabewert eines uint32_t
destructor ist, und warum ist es sinnvoll?
Heute habe ich diesen Code, die in einer Klasse:uint32_t destructor Rückgabewert
static const uint32_t invalid_index = ~uint32_t();
Meine Frage ist, was ist der Rückgabewert eines uint32_t
destructor ist, und warum ist es sinnvoll?
das kein destructor ist, sondern ein bitweise NOT
Operator auf einen Wert initialisiertuint32_t
.
Ein Wert initialisiert Integraltyp ist 0
, also nehmen Sie die bitweise NOT
von 0
.
Ähnlich:
uint32_t x = uint32_t(); // 32 0's in binary form
uint32_t y = ~x; // 32 1's in binary form
Es ist kein destructor ist es binär nicht. Hier ist der ungültige Index gleich ~ uint32_t (0). Dies ist eine vorzeichenlose 32-Bit-Ganzzahl mit allen gesetzten Bits. d.h. 0xffffffff.
Es ist die bitweise NICHT und es kann verwendet werden, ergänzen, um die zu finden (z. B. ~ 1011 = 0100) oder als Zwischenschritt bei der 2s Ergänzung zu finden versuchen, (z. B. [~ 1011] + 0001 = 0101).
Zunächst einmal haben so viele bereits erwähnt, ist der Code, den Sie sahen,
static const uint32_t invalid_index = ~uint32_t();
ist kein Destruktoraufrufs aber das bitweise „nicht“ ~
, auf den Standardwert des Typs angewandt, uint32_t()
, dh ~(uint32_t(0))
.
Nun zu Ihrer Frage,
Meine Frage ist, was ist der Rückgabewert einer uint32_t destructor ist, und warum ist es sinnvoll?
Der Rückgabetyp des pseudo-destructor (es ’ s kein echter destructor, nur ein do-nothing Betrieb mit der gleichen Notation als Destruktoraufrufs) ist void
, und es ’ s vor allem nützlich für generische Programmierung, wo Sie ’ t den Typ kennen.
Beispiel:
uint32_t x;
x.~uint32_t(); // Silly but valid, a pseudo-destructor call.
@ downvoter: bitte erklären Sie Ihre Einsicht, damit andere Sie nicht ernst nehmen können. –
-1 "Hier ist der ungültige Index gleich uint32_t (~ 0)" Nein, nicht im Allgemeinen. Das Literal ist ein "int", und "int" hat nur 16 Bit. –
"Das Literal ist ein int, und int ist nur garantiert 16 Bits". Ist uint32 nicht garantiert 32 Bit? – user1507133
@ user1507133, ja, aber '0' ist kein' uint32_t' es ist ein 'int', und so ist' ~ 0' –