Hoy vi este código, dentro de una clase:uint32_t valor de retorno destructor
static const uint32_t invalid_index = ~uint32_t();
Mi pregunta es, ¿cuál es el valor de retorno de un destructor uint32_t
, y por qué es útil?
Hoy vi este código, dentro de una clase:uint32_t valor de retorno destructor
static const uint32_t invalid_index = ~uint32_t();
Mi pregunta es, ¿cuál es el valor de retorno de un destructor uint32_t
, y por qué es útil?
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
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.
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).
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.
@downvoter: por favor explique su visión para que otros puedan evitar tomarlo en serio. –
-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. –
"El literal es un int, y int solo tiene 16 bits garantizados". ¿No está garantizado que uint32 sea de 32 bits? – user1507133
@ user1507133, sí, pero '0' no es' uint32_t' sino '' int', al igual que '~ 0' –