2012-08-02 14 views

Respuesta

16

Eso no es un destructor, sino un operador bit a bit NOT aplica a un valor inicializado-uint32_t.

Un tipo integral inicializado de valor es 0, por lo que está tomando el bit NOT de 0.

similares a:

uint32_t x = uint32_t(); // 32 0's in binary form 
uint32_t y = ~x;   // 32 1's in binary form 
3

No es un destructor, es binario no. Aquí el índice no válido es igual a ~ uint32_t (0). Que es un entero sin signo de 32 bits con todos los bits establecidos. es decir, 0xffffffff.

+0

-1 "Aquí el índice no válido es igual a uint32_t (~ 0)" No, no en general. El literal es un 'int', y' int' solo tiene 16 bits. –

+0

"El literal es un int, y int solo tiene 16 bits garantizados". ¿No está garantizado que uint32 sea de 32 bits? – user1507133

+0

@ user1507133, sí, pero '0' no es' uint32_t' sino '' int', al igual que '~ 0' –

1

Es la bit a bit NO y puede ser usado para encontrar el complemento las (por ejemplo. ~ 1011 = 0100) o como un paso intermedio cuando se trata de encontrar el complemento a 2 (por ejemplo. [~ 1011] + 0001 = 0101).

8

En primer lugar, como muchos ya han mencionado, el código que viste,

static const uint32_t invalid_index = ~uint32_t(); 

no es una llamada al destructor pero el bit a bit "no" ~, aplicado al valor predeterminado del tipo, uint32_t(), es decir, ~(uint32_t(0)).

Ahora a su pregunta,

Mi pregunta es, ¿cuál es el valor de retorno de un destructor uint32_t, y por qué es útil?

El tipo de retorno de los pseudo-destructor (it ’ s no un destructor real, sólo una operación que no hace nada con la misma notación que una llamada al destructor) es void, y ’ s principalmente útil para programación genérica donde don ’ t saber el tipo.

Ejemplo:

uint32_t x; 
x.~uint32_t(); // Silly but valid, a pseudo-destructor call. 
+7

@downvoter: por favor explique su visión para que otros puedan evitar tomarlo en serio. –