2012-08-02 18 views
11

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?

risposta

16

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 
3

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.

+0

-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. –

+0

"Il letterale è un int, e int è garantito per avere solo 16 bit". Uint32 non è garantito per essere 32 bit? – user1507133

+0

@ user1507133, sì, ma '0' non è un 'uint32_t' è un' int', e quindi è '~ 0' –

1

è 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).

8

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. 
+7

@downvoter: ti preghiamo di spiegare la tua opinione in modo che altri possano evitare di prenderti sul serio. –