Oggi ho visto questo codice, all'interno di una classe:uint32_t valore di ritorno distruttore
static const uint32_t invalid_index = ~uint32_t();
La mia domanda è, qual è il valore di ritorno di un uint32_t
distruttore, e perché è utile?
Oggi ho visto questo codice, all'interno di una classe:uint32_t valore di ritorno distruttore
static const uint32_t invalid_index = ~uint32_t();
La mia domanda è, qual è il valore di ritorno di un uint32_t
distruttore, e perché è utile?
Questo non è un distruttore, ma un operatore di bit per bit NOT
applicato ad un valore di -inizializzatouint32_t
.
Un valore di tipo integrale inizializzato è 0
, quindi si sta prendendo il bit per bit NOT
di 0
.
Simile a:
uint32_t x = uint32_t(); // 32 0's in binary form
uint32_t y = ~x; // 32 1's in binary form
Non è un distruttore, è binario non. Qui l'indice non valido è uguale a ~ uint32_t (0). Che è un intero senza segno a 32 bit con tutti i bit impostati. Ad esempio 0xffffffff.
è il bit a bit NON e può essere utilizzato per trovare il complemento a quelle (ad es. ~ 1011 = 0100) o come un passo intermedio quando si cerca di trovare il complemento di 2 (ad es. [~ 1011] + 0001 = 0101).
Prima di tutto, come molti hanno già detto, il codice che avete visto,
static const uint32_t invalid_index = ~uint32_t();
non è una chiamata distruttore, ma il bit "non" ~
, applicato al valore di default del tipo, uint32_t()
, cioè ~(uint32_t(0))
.
Ora alla tua domanda,
La mia domanda è, qual è il valore di ritorno di un distruttore uint32_t, e perché è utile?
Il tipo ritorno dei pseudo-destructor (it ’ non s una vera destructor, solo un funzionamento do-nulla con la stessa notazione di una chiamata distruttore) è void
, ed ’ s particolarmente utile per i programmazione generica dove non si conosce il tipo ’ t.
Esempio:
uint32_t x;
x.~uint32_t(); // Silly but valid, a pseudo-destructor call.
@downvoter: ti preghiamo di spiegare la tua opinione in modo che altri possano evitare di prenderti sul serio. –
-1 "Qui l'indice non valido è pari a uint32_t (~ 0)" No, non in generale. Il letterale è un 'int', e' int' è garantito con 16 bit. –
"Il letterale è un int, e int è garantito per avere solo 16 bit". Uint32 non è garantito per essere 32 bit? – user1507133
@ user1507133, sì, ma '0' non è un 'uint32_t' è un' int', e quindi è '~ 0' –